This是怎麼.empty
方法聲明中scala.collection.mutable.Map
對象斯卡拉11.5:可變的Collection.empty方法是否違反了Scala的零參數命名約定?
def empty[A, B]: Map[A, B]
不應該在該方法具有空括號,這樣的嗎?
def empty[A, B](): Map[A, B]
上Scala的naming conventions提示頁面,不用說了吧明確,即忽略上一個0元數法的括號是純粹的功能代碼的慣例,幷包括空括號意味着該方法具有副作用影響。 (我想我遇到了一個更加明確的錯誤消息。)
可變的.empty
方法有副作用,因爲您可以將單獨調用的結果區分爲.empty
。它不應該得到空的圓括號,即使它在immutable.Map
的隊友不?
關於我自己的代碼,是否有一個特殊的命名約定,我應該遵循從0-arity方法創建和返回一個可變對象?
我的理解是,如果將第二次調用替換爲第一次調用結果的變量時,程序結果發生變化,則函數執行副作用。每次調用'.empty'時,必須有所不同,這是必要的,以便稍後可以修改一個空映射而不會影響另一個。還是我遵循一個非標準的「副作用」命名約定? :)我基本上從_ [Scala的函數式編程](http://www.manning.com/bjarnason/FPWS_CH01.pdf),_ p。 10. –
@benkovitz我認爲你會混淆「無副作用」與「引用透明」? –
@ChrisMartin謝謝!事實上,我沒有區分他們。我已經被功能編程倡導者反覆地責罵到,創建相同但不等於「.equal」的對象是一種副作用,我認爲這個想法是有價值的。事實上,對象身份有時會在我的Scala程序中弄髒決定論。有沒有一些約定創建對象,甚至不打算保持'.equal' [不計數](http://stackoverflow.com/questions/31151616/do-the-mutable-collection-empty-methods-violate-scalas -zero-argument-naming-con/31151649?noredirect = 1#comment50341805_31156148)作爲副作用? –