是否可以在 Scala 中定义泛型运算符?
Scala 让我可以在函数上映射任意运算符,这非常有用。但是,在我可能希望操作员根据应用程序的状态进行更改的情况下,这似乎具有限制性。
举个例子:我有一个包含用户的表和一个包含他们各自关系的表。每个关系都有一个类型,例如:“friends-with”、“works-with”等。根据我的领域模型,我希望 DSL 允许:is(john friends-with mary)
. 在这种情况下,john
和mary
都属于 Object User
,它有一个通用的 operator def <relationship> (a:User): Boolean = {...}
。
我想要实现的正是 Dynamic 允许我做的事情(见答案)。描述完美契合:
启用动态调用的标记特征。此特征的实例 x 允许对任意方法名称 meth 和参数列表 args 调用 x.meth(args)。如果 x 本身不支持调用,则将其重写为 x.applyDynamic("meth", args)。
更多信息在这里:http ://www.scala-lang.org/api/current/scala/Dynamic.html