你說得對,它無法正確解析第一個版本。下面是在樹上的差別它生成的第一和第二個選項:
scala> import scala.reflect.runtime.{universe => u}
import scala.reflect.runtime.{universe=>u}
scala> import scala.reflect.runtime.{currentMirror => m}
import scala.reflect.runtime.{currentMirror=>m}
scala> import scala.tools.reflect.ToolBox
import scala.tools.reflect.ToolBox
scala> val tb = m.mkToolBox()
tb: scala.tools.reflect.ToolBox[reflect.runtime.universe.type] = scal[email protected]
scala> val treeNotWorking = tb.parse("(x:Boolean)=>!x")
treeNotWorking: tb.u.Tree = (x: Boolean).$eq$greater$bang(x)
scala> val treeWorking = tb.parse("(x:Boolean) => !x")
treeWorking: tb.u.Tree = ((x: Boolean) => x.unary_$bang)
正如你所看到的,它試圖撥打=>!
在別處定義的布爾變量x
。舉例來說,如果我們在示波器擁有x
,我們會得到一個不同的錯誤:
scala> val x = true
x: Boolean = true
scala> val a = (x:Boolean)=>!x
<console>:17: error: value =>! is not a member of Boolean
val a = (x:Boolean)=>!x
謝謝,亞歷克斯!這有幫助。 –