我如何委派给 Scala 的成员? [英] How can I delegate to a member in Scala?
问题描述
是否可以在 Scala 中编写如下代码:
Is it possible in Scala to write something like:
trait Road {
...
}
class BridgeCauseway extends Road {
// implements method in Road
}
class Bridge extends Road {
val roadway = new BridgeCauseway()
// delegate all Bridge methods to the `roadway` member
}
还是需要将Road
的每一个方法都一一实现,并在roadway
上调用对应的方法?
or do I need to implement each of Road
's methods, one by one, and call the corresponding method on roadway
?
推荐答案
最简单的方法是使用隐式转换而不是类扩展:
The easiest way to accomplish this is with an implicit conversion instead of a class extension:
class Bridge { ... }
implicit def bridge2road(b: Bridge) = b.roadway
只要您不需要原始的 Bridge
随身携带即可(例如,您要将 Bridge
存储在 Bridge
的集合中>道路).
as long as you don't need the original Bridge
to be carried along for the ride (e.g. you're going to store Bridge
in a collection of Road
).
如果您确实需要再次取回 Bridge
,您可以在 Road
中添加一个 owner
方法,该方法返回一个 Any
,使用 BridgeCauseway
的构造函数参数设置它,然后进行模式匹配以获取您的网桥:
If you do need to get the Bridge
back again, you can add an owner
method in Road
which returns an Any
, set it using a constructor parameter for BridgeCauseway
, and then pattern-match to get your bridge:
trait Road {
def owner: Any
...
}
class BridgeCauseway(val owner: Bridge) extends Road { . . . }
class Bridge extends Road {
val roadway = new BridgeCauseway(this)
...
}
myBridgeCauseway.owner match {
case b: Bridge => // Do bridge-specific stuff
...
}
这篇关于我如何委派给 Scala 的成员?的文章就介绍到这了,希望我们推荐的答案对大家有所帮助,也希望大家多多支持IT屋!