2013-01-17 13 views
6

Julia的許多常​​見操作(例如從Set中刪除項目)最近都重命名,舊的功能已棄用。爲什麼這些在Julia重新命名的集合的操作?

例如,

del(IntSet(1,2,3), 1) 

現在會彈出一個警告

WARNING: del is deprecated, use delete! instead. 

一些改名功能:

@deprecate push  push! 
@deprecate pop   pop! 
@deprecate grow  grow! 
@deprecate enqueue  unshift! 
@deprecate unshift  unshift! 
@deprecate shift  shift! 
@deprecate insert  insert! 
@deprecate del   delete! 
@deprecate del_all  empty! 

爲什麼這些改名?正在追加一個!改變集合狀態的函數現在是一個約定?

+0

我對Julia沒有任何經驗(之前沒有聽說過),但我在其他語言中看過'!'後綴。從函數編程的角度來看,'!'表示一個函數,其主要目的是一個變化的副作用。一眼看上去,Julia看起來是在設計parellel處理,而且可變性增加了併發性的複雜性:所以'!'會加強這個特定的調用在這方面需要更多的關注(而另一個函數可能是更好的選擇) 。 –

回答

9

您可以閱讀julia-dev線程here。基本上,它是簡單地改變要尊重arrays文檔中描述的規則:最後一個函數

,填寫!之處在於它修改現有 數組,而不是構建一個新的不同。作爲慣例,具有此屬性的函數 的名稱以感嘆號結尾。這些功能有時稱爲「變異」功能,或「就地」功能。

FWIW我認爲這是一個好主意,至少對於Base

7

使用!總是一個明確的約定來表示突變,直到最近纔剛剛執行。對於push,人們可以很容易認爲這不是必需的。但是使用push!而不是push清楚地表明,在這種情況下發生突變的方式與使用sort!時發生突變的方式完全相同,這與sort有很大不同。

此感嘆號約定存在於Scheme和Ruby中,可能還有其他幾種語言。它不存在於像R這樣的語言中,這種語言不允許我們在不借助語言的基礎內容的情況下進行變異。

相關問題