Scala后缀表示法正在编译

时间:2014-02-20 11:08:15

标签: scala compilation coding-style

Scala style guide说这个后缀符号:

  

此样式不安全,不应使用。因为分号是   可选,编译器将尝试将其视为中缀方法if   它可以,可能从下一行开始学习。

names toList
val answer = 42        // will not compile!
     

这可能   最好导致意外的编译错误,并愉快地编译   最坏的错误代码。虽然某些DSL使用了语法,但它   应该被视为已弃用,并且应该避免使用。

(代码注释是原始材料的一部分。)

我试图向某人证明这一点。

test.scala

val names = List(1, 2, 3)
names toList
val answer = 42         // will compile!

但它编译并运行良好

$ scala -version
Scala code runner version 2.9.1 -- Copyright 2002-2011, LAMP/EPFL
$ scala test.scala

我的例子出了什么问题?

2 个答案:

答案 0 :(得分:2)

这是一个更好的例子:

List(1, 2, 3) toList
42

被解析为

List(1, 2, 3).toList(42)

并抛出异常(插入apply后),而不是返回42

大概在样式指南示例中val可以防止误解。

答案 1 :(得分:0)

也许它可以帮助您找到答案:

这可能会导致意外的编译错误,并且最糟糕的是编译错误的代码。虽然某些DSL使用了这种语法,但应该将其视为已弃用,并避免使用。

从Scala 2.10开始,使用后缀运算符表示法将导致编译器警告。

警告出现在scala> = 2.10上,而不是以前的版本。