可变的Collection.empty方法是否违反了Scala的零参数命名约定?

Ben*_*itz 3 collections scala side-effects naming-conventions

是在Scala 11.5 .empty中的scala.collection.mutable.Map对象中声明方法的方法:

def empty[A, B]: Map[A, B]
Run Code Online (Sandbox Code Playgroud)

这个方法不应该有空括号,像这样吗?

def empty[A, B](): Map[A, B]
Run Code Online (Sandbox Code Playgroud)

关于Scala的命名约定的页面建议,在没有明确说明的情况下,省略0-arity方法的括号是纯函数代码的约定,并且包括空括号意味着该方法具有副作用.(我想我遇到了一个更明确的错误信息.)

可变.empty方法有副作用,因为您可以区分单独调用的结果.empty.它不应该得到空括号,即使它的配偶immutable.Map没有?

关于我自己的代码,在从0-arity方法创建和返回可变对象时,我应该遵循一个特殊的命名约定吗?

Mic*_*jac 6

scala.collection.mutable.Map.empty[A, B]没有任何副作用.这是一种mutable.Map[A, B]每次调用它时都会返回一个新方法的方法.

mutable.Map#empty(特征本身中的方法)也返回mutable.Map相同类型的新空.它不会清空集合(就像它似乎可能),因此没有副作用.

如果您不确定,请查看来源.

  • @benkovitz我认为你把"非副作用"与"引用透明"混为一谈? (4认同)