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程序。 –