gpt4 book ai didi

scala - 有什么方法可以使用 import someValue._ 在 scala 中实现覆盖方法?

转载 作者:行者123 更新时间:2023-12-04 02:45:37 25 4
gpt4 key购买 nike

有没有办法做这样的事情:

scala> trait Foo { def f:Int=0 }
defined trait Foo

scala> class FooImpl extends Foo { override val f = 1 }
defined class FooImpl

scala> class Bar(foo:Foo) extends Foo{ import foo._ }
defined class Bar

scala> (new Bar(new FooImpl)).f
res2: Int = 0

scala> trait Foo { def f:Int }
defined trait Foo

scala> class Bar(foo:Foo) extends Foo{ import foo._ }
<console>:8: error: class Bar needs to be abstract, since method f in trait Foo of type => Int is not defined
class Bar(foo:Foo) extends Foo{ import foo._ }
^

scala>

...以某种方式导致子类通过导入覆盖父方法?基本上我认为能够在没有所有输入的情况下使用组合会很有趣。只是好奇这样的事情是否可能。

最佳答案

您真正需要的是一种将方法实现委托(delegate)给成员的方法。

该问题已在此处解决:Proxies / delegates in Scala

基本上,有一种方法可以使用宏来完成。可以在此处找到实现:https://github.com/adamw/scala-macro-aop

上面提供了一个@delegate 宏注解,可以应用于数据成员,使编译器生成代码,将方法调用委托(delegate)给该成员。请注意,宏注释是为 Scala 2.11 计划的一项实验性功能,但您可以使用 Macro Paradise 编译器插件在 Scala 2.10 中使用它们。

关于scala - 有什么方法可以使用 import someValue._ 在 scala 中实现覆盖方法?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/18925361/

25 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com