リフトコード:
import net.liftweb.util.Helpers._
object test extends App {
val xml = <div>
<span name="a">a</span>
<span name="b">b</span>
</div>
val t1 = if (true) {
"@a" #> "xxx"
} else {
"@a" #> "yyy"
} &
"@b" #> "zzz"
val t2 = (if (true) {
"@a" #> "xxx"
} else {
"@a" #> "yyy"
}) &
"@b" #> "zzz"
println("------------- t1 ------------")
println(t1(xml))
println("------------- t2 ------------")
println(t2(xml))
}
出力:
------------- t1 ------------
<div>
xxx
<span name="b">b</span>
</div>
------------- t2 ------------
<div>
xxx
zzz
</div>
奇妙ですよね?唯一の違いは、t2
が でラップされif else
ていること()
です。
私の友人がバイトコードを逆コンパイルしたところ、scala がt1
次のようなものをコンパイルしたことがわかりました。
t1 = true ? "@a" #> "xxx" : "@a" #> "yyy" & "@b" #> "zzz"
コードは次のとおりです。
if (true)
"@a" #> "xxx"
else
"@a" #> "yyy" &
"@b" #> "zzz"
どこが間違っていますか?