そうです、最初のバージョンを正しく解析できません。最初のオプションと 2 番目のオプションで生成されるツリーの違いは次のとおりです。
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] = scala.tools.reflect.ToolBoxFactory$ToolBoxImpl@4426fc2e
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