Scala SAM:在使用lambda实现时,如何访问SAM trait的受保护成员?

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

当使用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 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。