Scala 如何定义一个通过调用方法将参数传递给超类的对象?
我有一个超级班:Scala 如何定义一个通过调用方法将参数传递给超类的对象?,scala,extend,traits,Scala,Extend,Traits,我有一个超级班: class P(name:String) 还有一个特点: trait SysConfig { def prop(key:String) = System.getProperty(key) } 然后我想定义一个扩展p的对象: object C extends P(prop("user.name") 它没有被编译,因为它找不到prop方法。因此,我使用系统配置: object C extends P(prop("user.name") with SysConfig 不幸
class P(name:String)
还有一个特点:
trait SysConfig {
def prop(key:String) = System.getProperty(key)
}
然后我想定义一个扩展p
的对象:
object C extends P(prop("user.name")
它没有被编译,因为它找不到prop
方法。因此,我使用系统配置:
object C extends P(prop("user.name") with SysConfig
不幸的是,它仍然无法编译
有什么方法可以让它工作吗?参数是在当前定义之外的上下文中计算的,所以没有 您必须将计算放在另一个对象中 如果你这么想,答案也是否定的:
scala> class P(name: String)
defined class P
scala> trait Prop { def prop(k: String) = sys.props(k) }
defined trait Prop
scala> class C(p: String = C.prop("user.name")) extends P(p); object C extends C() with Prop
<console>:9: error: module extending its companion class cannot use default constructor arguments
class C(p: String = C.prop("user.name")) extends P(p); object C extends C() with Prop
^
scala>P类(名称:String)
定义类P
scala>trait Prop{def Prop(k:String)=sys.props(k)}
定义特征道具
scala>class C(p:String=C.prop(“user.name”))扩展了p(p);对象C使用Prop扩展了C()
:9:错误:扩展其伴生类的模块无法使用默认构造函数参数
类C(p:String=C.prop(“user.name”))扩展了p(p);对象C使用Prop扩展了C()
^
这是因为默认参数是由同伴定义的方法
同样地
scala> class C(p: String) extends P(p); object C extends C(C.prop("user.name")) with Prop
<console>:9: error: super constructor cannot be passed a self reference unless parameter is declared by-name
class C(p: String) extends P(p); object C extends C(C.prop("user.name")) with Prop
^
scala>C类(p:String)扩展了p(p);对象C使用prop扩展C(C.prop(“user.name”))
:9:错误:除非按名称声明参数,否则无法向超级构造函数传递自引用
类C(p:String)扩展了p(p);对象C使用prop扩展C(C.prop(“user.name”))
^
如果我没有误解:),我认为这里有两件事是不可能的
class P(name:String)
trait SysConfig {
def prop(key:String) = System.getProperty(key)
}
class C extends P("123") with SysConfig {
override def prop(key: String) = "123"
}
trait Foo extends P with SysConfig {
override def prop(key: String) = "123"
}
new C