我有以下代码:
object testLines extends App {
val items = Array("""a-b-c d-e-f""","""a-b-c th-i-t""")
val lines = items.map(_.replaceAll("-", "")split("\t"))
print(lines.map(_.mkString(",")).mkString("\n"))
}
我错误地认为我没有在replaceAll和split之间放置一个点但是它有效。
相反,当在replaceAll和split之间放一个点时,我得到了一个错误
- 标识符,但';'找到。
- 发现隐式转化:items =>
发生了什么事? 为什么没有一个点就可以工作,但是没有使用点。
更新: 它也适用于dot。错误消息是scala ide中的错误。问题的第一部分仍然有效
谢谢,
大卫
答案 0 :(得分:2)
您刚刚发现Operators are methods。如果方法类似于运算符并且看起来更好,则x.split(y)
也可以写成x split y
。但是,没有什么可以阻止你把任何一方放在像x split (y)
,(x) split y
或甚至(x) split (y)
这样的括号中,这可能是必要的(如果不是非常必要的话,这对于可读性是一个好主意),如果您传递的表达式比简单变量或常量更复杂,需要使用括号来覆盖优先级。
使用您编写的示例代码,为了清晰起见,在操作符样式中执行整个操作并不是一个坏主意,仅在语法需要的情况下使用括号和/或它们使分组更明显。我可能写得更像这样:
object testLines extends App {
val items = Array("a-b-c d-e-f", "a-b-c th-i-t")
val lines = items map (_ replaceAll ("-", "") split "\t")
print(lines map (_ mkString ",") mkString "\n")
}