我有以下代码:
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 之间放一个点时,我得到了一个错误
- identifier expected but ';' found.
- Implicit conversions found: items =>
这是怎么回事? 为什么它没有点就可以工作,但有点就不行。
更新: 它也适用于点。错误消息是 scala ide 中的错误。问题的第一部分仍然有效
谢谢,
大卫
最佳答案
你刚刚发现 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")
}
关于scala - map 中函数之间没有点,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/20097747/