为什么 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
超载了。如果一个重载没有括号,过去会出现类型推断问题。我不知道那个类型推断问题是否仍然存在,但是作为解决方法添加的括号仍然存在。
Scala 的不可变 Set
class 有一个名为 subsets()
的方法,它 returns 一个集合的所有子集。
通常空括号方法是为会引起副作用的方法保留的,但这个似乎没有。
为什么不将此方法定义为无参数方法?它实际上会引起一些副作用吗?
因为它们 return 是子集集合的可变迭代器,所以处理迭代器会有副作用。因此,每次调用 subsets()
也会创建一个不同的迭代器,因此
someSet.subsets() != someSet.subsets()
这表明调用不是引用透明。
另请参阅 this discussion 关于另一个集合类型 (IterableOnce
) 的类似方法 (iterator()
)。
https://github.com/scala/bug/issues/9116
因为 subsets
超载了。如果一个重载没有括号,过去会出现类型推断问题。我不知道那个类型推断问题是否仍然存在,但是作为解决方法添加的括号仍然存在。