地图中的函数之间没有点

时间:2013-11-20 13:50:24

标签: 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之间放一个点时,我得到了一个错误

  
      
  • 标识符,但';'找到。
  •   
  • 发现隐式转化:items =>
  •   

发生了什么事? 为什么没有一个点就可以工作,但是没有使用点。

更新: 它也适用于dot。错误消息是scala ide中的错误。问题的第一部分仍然有效

谢谢,

大卫

1 个答案:

答案 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")
}