scala - map 中函数之间没有点

标签 scala

我有以下代码:

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/

相关文章:

scala - 是否可以根据 Scala 中的另一个 list 定义 list ?

scala - 惯用的 Scala : Mapping over option depending on condition

scala - Haskell scala 互操作性

Scala Sets 包含相同的元素,但 SameElements() 返回 false

scala - 如何在scala程序中的vs代码中设置断点

scala - 在 Scala 中为算术表达式创建 AST

scala - Scala/Spark数据帧: find the column name corresponding to the max

Scala Play Framework 2.1 Slick 1.0 Cake 模式公用表字段

scala - 从 taskKey 设置项目版本

scala - 在 Spark 中对 RDD 中的邻居元素进行操作