İşte aşağıdaki sorun.Ad-by-tekil kolon operatörünü ve alan tutarsızlığını birleştirin
object Test {
def /:(s: => Unit) = {
println("/:")
s
}
}
println("A") /: Test
O yazdırır: Aşağıdaki çalıştırdığınızda
A
/:
Ancak, ben yazdırmak için bunu bekliyordum:
/:
A
son ifadesi sözde Test./:(println("A"))
yeniden yazıldı beri - hangi yol, ikinci değeri verir.
İlk sözdizimi işini yapmanın bir yolu var mı? println("A") /: Test
ancak ad-by-ile?
desugar yöntemi kullanarak Düzenleme
, ben aramalar farklı şekeri alınmış öğrendim.
> desugar { println("A") /: Test}
val x$1: Unit = println("A");
Test./:(x$1)
Bu yüzden neden hala bu seçeneği merak ediyorum.
İfadenin "Test ./ :(println (" A "))' ile eşdeğer olduğunu neden "sanıyorsunuz"? Spesifikasyon şöyle der: "e1 op e2" sola birleştirici bir ikili işlem "e1.op (e2)" olarak yorumlanır. Eğer op 'doğru-birleştirici ise, aynı işlem' val vald = e1; e2.op (x)} ', burada' x' yeni bir isimdir. Yani, {val x = println ("A") karşılığıdır; Test./:(x)}. –