为什么 Scala 的 Set.subsets() 方法定义为空括号方法?

Why is Scala's Set.subsets() method defined as an empty-paren method?

Scala 的不可变 Set class 有一个名为 subsets() 的方法,它 returns 一个集合的所有子集。

通常空括号方法是为会引起副作用的方法保留的,但这个似乎没有。

为什么不将此方法定义为无参数方法?它实际上会引起一些副作用吗?

因为它们 return 是子集集合的可变迭代器,所以处理迭代器会有副作用。因此,每次调用 subsets() 也会创建一个不同的迭代器,因此

someSet.subsets() != someSet.subsets()

这表明调用不是引用透明

另请参阅 this discussion 关于另一个集合类型 (IterableOnce) 的类似方法 (iterator())。

https://github.com/scala/bug/issues/9116

因为 subsets 超载了。如果一个重载没有括号,过去会出现类型推断问题。我不知道那个类型推断问题是否仍然存在,但是作为解决方法添加的括号仍然存在。