我正在玩从Scala调用外部命令。以下是我正在研究的一个被剥离的例子:
import scala.sys.process._
object Testing {
def main(args: Array[String]) {
val command = "ls"
val result = command!
if (result != 0) { // <---- illegal start of simple expression
println("Error")
return
}
}
}
我收到编译错误:illegal start of simple expression
表示if
语句的行。我可以用新的一行修复它:
val result = command!
// Add a line
if (result != 0) {
我怀疑它与!
后缀函数有关,但我的理解是,多余的行/空格不应该对编译器产生影响。
答案 0 :(得分:2)
您需要明确启用后缀表达式:
1)在本地导入标记:import scala.language.postfixOps
2)或将标志添加到项目本身:scalacOptions += "-language:postfixOps"
来自@Łukasz的评论中的上述链接包含有关此功能的大量信息。另外,请参阅“后缀符号”部分中的http://docs.scala-lang.org/style/method-invocation.html了解具体用例。
编辑:也许还不够清楚,但正如@Łukasz在评论中指出的那样,导入/启用后缀表达式并不会使您的代码编译。它只是避免编译器警告。您的代码将无法编译,因为分号是可选的,并且编译器将!
运算符视为中缀,从而从表达式的下一行中获取元素。这正是上面链接中的文档与完全相同的示例所说明的内容:
此样式不安全,不应使用。因为分号是 可选,编译器将尝试将其视为中缀方法if 它可以,可能从下一行开始学习。
names toList val answer = 42 // will not compile!
这可能会导致意外的编译错误,并且很愉快 最糟糕的是编译错误的代码。虽然某些人使用了语法 DSL应该被认为是弃用的,并且可以避免使用。