为什么scala集合没有任何人类可读的方法,如.append,.push等

时间:2011-08-24 14:20:13

标签: scala scala-collections

Scala集合有一堆可读且几乎可读的运算符,如:++:,但为什么没有像append这样的人类可读的同义词?

5 个答案:

答案 0 :(得分:9)

Scala中的所有可变集合都有BufferLike trait,并且它定义了追加方法。

不可变集合没有 BufferLike特性,因此只定义其他方法,这些方法不会更改集合,但会生成新集合。

答案 1 :(得分:4)

符号方法名称允许与赋值操作=组合。

例如,如果您有一个创建新集合的方法++,您可以自动使用++=将新集合分配给某个变量:

var array = Array(1,2,3)
array ++= Array(4,5,6)
// array is now Array(1,2,3,4,5,6)

如果没有符号方法名称,这是不可能的。

答案 2 :(得分:3)

事实上,它们通常是一些人类可读的同义词:

  • foldLeft相当于/:
  • foldRight相当于:\

其余的是加法运算符,它们具有很强的可读性:

  • ++相当于java addAll
  • :+追加
  • +:是前置

分号的位置表示接收器实例。

最后,一些奇怪的运算符是其他函数式编程语言的遗留物。如列表构造(SML)或演员消息(erlang)。

答案 3 :(得分:2)

它与其他语言有什么不同吗?

让我们来看看Java。 +-*/int的人类可读版本是什么?或者,我们来看String+的人类可读版本是什么?请注意,concat不是一回事 - 它不接受非String参数。

也许你对它感到困扰,因为在Java中 - 与C ++不同 - 要么只使用非字母运算符,要么使用字母运算符 - String的{​​{1}}除外}。

答案 4 :(得分:0)

Scala标准库并不适合Java友好。相反,提供适配器以在Java和Scala集合之间进行转换。

尝试提供Java友好API不仅会限制标识符的选择(或者要求提供别名),还会限制使用泛型和函数类型的方式。验证设计需要更多的测试。

关于同一主题,我记得关于2.8集合是否应该实现java.util.Iterable的一些争论。

http://scala-programming-language.1934581.n4.nabble.com/How-to-set-the-scale-for-scala-BigDecimal-s-method-td1948885.html

http://www.scala-lang.org/node/2177