Scala的不可變Set類有一個名為subsets()的方法來回傳一個集的所有子集。
通常情況下,空的方法是為引起副作用的方法保留的,但這個方法似乎沒有。
為什么這個方法沒有被定義為無引數方法?事實上,它是否會引起一些副作用?
為什么這個方法沒有被定義為無引數方法?
uj5u.com熱心網友回復:
https://github.com/scala/bug/issues/9116
因為subsets是多載的。如果一個多載沒有后綴,曾經有一個型別推理的問題。我不知道這個型別推理問題是否仍然存在,但是作為一種變通方法而添加的帕累斯仍然存在。
uj5u.com熱心網友回復:
因為它們回傳一個指向子集的可變迭代器,所以處理迭代器會有副作用。因此,對subsets()的每一次呼叫也將創建一個不同的迭代器,所以
someSet.subsets() != someSet.subsets()
這表明該呼叫不是推理透明的。
也請看這個討論關于另一個集合型別(IterableOnce)上的類似方法(iterator())。
轉載請註明出處,本文鏈接:https://www.uj5u.com/caozuo/332579.html
標籤:
