以下是以下问题。当我运行以下命令:组合名称为冒号的操作符和空间异性
object Test {
def /:(s: => Unit) = {
println("/:")
s
}
}
println("A") /: Test
它打印:
A
/:
不过,我期待它打印:
/:
A
自上次表达假想改写Test./:(println("A"))
- 它通过方式,给第二个价值。
有没有人知道如何使第一种语法工作,例如println("A") /: Test
,但与名称?
编辑
使用desugar方法,我发现该调用不同脱。
> desugar { println("A") /: Test}
val x$1: Unit = println("A");
Test./:(x$1)
因此,我仍然想知道为什么这个选择。
为什么你“假设”表达式等同于'Test ./ :(:(println(“A”))'?该规范说:“左联合二进制操作'e1 op e2'被解释为'e1.op(e2)',如果op是右联合的,则相同的操作被解释为'{val x = e1; e2.op(x)}',其中'x'是一个新名字。“所以,它相当于'{val x = println(“A”); Test./:(x)}'。 –