Scala 如何访问同名容器类的成员?斯卡拉
我有这样的想法:Scala 如何访问同名容器类的成员?斯卡拉,scala,Scala,我有这样的想法: abstract class HaveData{ val data:String } class HD1 extends HaveData{ val data = "HD1 data" } class HD2 extends HaveData{ val data = "HD2 data" object InnerHD extends HD1{ def prt = println(data) } } 我想打印“HD2数据”而不是“HD1数据”,怎么做
abstract class HaveData{
val data:String
}
class HD1 extends HaveData{
val data = "HD1 data"
}
class HD2 extends HaveData{
val data = "HD2 data"
object InnerHD extends HD1{
def prt = println(data)
}
}
我想打印“HD2数据”而不是“HD1数据”,怎么做
我可以将InnerHD转换为类并将数据作为参数提供,但有更好的方法吗?对于这种情况,您可以使用,对于这个特定问题,您不需要添加其他类型
abstract class HaveData {
def data: String
}
class HD1 extends HaveData {
override val data = "HD1 data"
}
class HD2 extends HaveData { self => // Alias to this in the HD2 level.
override val data = "HD2 data"
object InnerHD extends HD1 {
def prt(): Unit = {
println(self.data)
}
}
}
(new HD2).InnerHD.prt()
// HD2 data
对于这种情况,您可以使用,对于这个特定的问题,您不需要添加其他类型
abstract class HaveData {
def data: String
}
class HD1 extends HaveData {
override val data = "HD1 data"
}
class HD2 extends HaveData { self => // Alias to this in the HD2 level.
override val data = "HD2 data"
object InnerHD extends HD1 {
def prt(): Unit = {
println(self.data)
}
}
}
(new HD2).InnerHD.prt()
// HD2 data
你也可以使用
def prt = println(HD2.this.data)
你也可以使用
def prt = println(HD2.this.data)
为什么要在原始代码中添加不必要的
覆盖
和{
}。如果您认为它可能会引起混乱,请随意编辑:)谢谢!我还在想办法,但谢谢你!所以“self=>”应该在“data”定义之前,或者在HD2主体中的任何地方?@Djuraminkov它必须是第一个语句。为什么要在原始代码中添加不必要的覆盖和{
}
。如果您认为它可能会引起混乱,请随意编辑:)谢谢!我还在想办法,但谢谢你!所以“self=>”应该在“data”定义之前,或者在HD2主体中的任何地方?@Djuraminkov它必须是第一个语句。这似乎是更好的解决方案,我应该重新接受这个吗?你的选择,我不会,因为另一个答案并不是真的更糟,也不是更早。这似乎是更好的解决方案,我应该重新接受这一个吗?你的选择,我不会,因为另一个答案不是真的更糟,也不是更早。