次の例のように、Scala は可能な最大の式に暗黙のクラス変換を適用しているようです。
scala> class B { def b = { println("bb"); true } }
defined class B
scala> class A { def a = { println("aa"); new B } }
defined class A
scala> (new A).a.b
aa
bb
res16: Boolean = true
scala> class XXX(b: => Boolean) { def xxx = 42 }
defined class XXX
scala> implicit def toXXX(b: => Boolean) = new XXX(b)
toXXX: (b: => Boolean)XXX
scala> (new A).a.b.xxx
res18: Int = 42
私はこの事実に非常に満足していますが、私の質問は、SLS のどの部分でこの動作が指定されているかということです。たとえば、最初に評価されず、その値に変換を適用するだけなのは(new A).a.b
なぜですか?true