Scala SAM:在使用lambda实现时,如何访问SAM trait的受保护成员?
当使用lambda实现所述SAM时,如何访问SAM特征的受保护方法 例如,这可以很好地编译:Scala SAM:在使用lambda实现时,如何访问SAM trait的受保护成员?,scala,Scala,当使用lambda实现所述SAM时,如何访问SAM特征的受保护方法 例如,这可以很好地编译: trait Foo { def foo(): String val bar = 5 } val f: Foo = () => f.bar.toString 但这些并不是: trait Foo { def foo(): String protected val bar = 5 } val f: Foo = () => f.bar.toString // Symbol ba
trait Foo {
def foo(): String
val bar = 5
}
val f: Foo = () => f.bar.toString
但这些并不是:
trait Foo {
def foo(): String
protected val bar = 5
}
val f: Foo = () => f.bar.toString // Symbol bar is inaccessible from this place
val f: Foo = () => bar.toString // Cannot resolve symbol bar
在使用lambda实现SAM时,有没有办法访问bar?试试看
val f: Foo = new Foo {
override def foo(): String = bar.toString
}
我应该更清楚一点:我仍然希望使用lambda。除非
val f:Foo=()=>f.bar,否则不能使用。toString
是对象/类/特征扩展Foo
中的成员。lambda不会扩展任何内容,因此无法访问超级属性。一旦你想这样做,就不要使用SAM。