4
如果庫不存在,我必須實現一個宏來代替另一個實現的類的實現。原因是用戶可能不願意安裝複雜的庫(比如說名字是complex.jar)。即使庫不存在,代碼編譯也是非常重要的。用Scala宏替換類實現
實際例子: 考慮例如一個用於計算複雜數學函數的工具。讓我們假設我們現在想要添加繪製結果的功能。爲此我們使用Matlab(我知道還有其他的,這只是一個例子)。讓我們假設Matlab有一個jar文件。由於並非所有用戶都安裝了Matlab,所以我希望我的代碼在沒有這個jar的情況下編譯,儘管它使用了這個jar中的Methods。
例子:
@ReplaceMeIfLibDoesNotExist("complex","DefaultConnector.scala")
class ComplexConnector{
import complex._;
def connect(){
complex = new ComplexLibrary(); // part of complex.jar
}
}
class DefaultConnector{
def connect(){
println("Currently not supported. Install complex.jar")
}
}
將類似的東西的工作?宏實現將如何?還是有一些更優雅的方式做這樣的事情?有一個具體的代碼示例是很好的。
非常感謝您提前。
我非常喜歡斯卡拉的宏觀系統,但這很可怕。 –
你害怕什麼意思?這太難了嗎?還是不好的風格?你在這種情況下做什麼?如果沒有宏,你可以做更好的事情嗎? – user1729603
這聽起來像是你本質上是在欺騙編譯器對你和它都知道的事情說「是」,可能會炸燬這條線。這感覺就像是一個糟糕的過去,那就是用運行時從字符串中讀取的類名來配置Java程序。 –