【发布时间】:2018-11-13 00:34:45
【问题描述】:
我正在尝试构建一个 Scala 应用程序,用户可以在其中加载实现由 trait 定义的接口的类,然后应用程序将使用该接口。
例如,我的 Operator trait
trait Operator {
def operate(a: Int, b: Int): Int
}
由要在运行时加载的用户定义类实现,添加。
class Add {
def operate(a: Int, b: Int): Int = a + b
}
应用程序如何检查这个 Add 类是否实现了它所知道的 Operator trait?我希望能够在已加载类的实例上调用 operate。
我尝试过像这样的简单模式匹配
case op: Class[Operator] => op.newInstance()
但这似乎是根据特征名称而不是成员签名来检查实现。
【问题讨论】:
-
会员签名 ?你的
Add类没有实现Operator特征。 -
“成员签名”可能是错误的术语。我的意思是模式匹配不是检查
Add是否使用适当的参数和输出类型实现了一个名为operate的函数。我看到Add没有实现Operator,但包括它似乎没有帮助。重要的是,我正在寻找一种可以独立编译应用程序和 Add 类的方法,以便用户编写一个遵循 Operator trait 准则但不能直接访问应用程序源代码的类。 -
让
Add实现Operator,而不是想出一些鸭式打字方案不是更容易吗?
标签: scala pattern-matching traits