2014-11-22 35 views
3

Julia風格指南says功能哪些「修改他們的參數」應該有他們的名字結尾!朱莉婭功能命名:我應該什麼時候附加一個爆炸?

然而,怎麼樣:那些修改它們的參數,但在返回之前他們返回到原來的狀態

  1. 的功能呢?

  2. 返回Task哪些函數在執行時修改參數?

  3. 函數返回這樣一個Task,但是當它完成時,參數將被恢復到它們的原始狀態?

他們的名字應該以!結尾?


作爲一個例子,考慮this module使用Knuth的Dancing Links Algorithm發現exact covers。它實現了一個類型CoverSet可與子集來填充,然後查詢用於第一確切蓋:

set = CoverSet() 
push!(set, [1, 2]) 
push!(set, [2, 3]) 
push!(set, [3, 4]) 
push!(set, [4, 1]) 

find_exact_cover(set) # returns [1, 3] 

find_exact_cover功能暫時修改數據在set同時尋找一種解決方案,而是由時間find_exact_cover回報, set將處於其原始狀態。它應該被命名爲find_exact_cover!而不是?

同樣,exact_cover_producer返回生產的所有確切蓋一個Task,但是當Task完成後,將set已經恢復:

for cover in exact_cover_producer(set) 
    println(cover) # prints [1,3] and [2,4] 
end 
# By now, set is restored. 

它應該是exact_cover_producer!


我知道這可能被認爲是主觀的,所以讓我澄清一下,我要求:從我想知道是否有在茱莉亞社會各界對這一公約,最好也範例標準庫或任何使用任一風格的軟件包。

+2

當我看到一個功能,而無需在朱莉婭爆炸我以爲我傳遞的所有參數會後不變通話已完成。功能內發生的事情不是我關心的。 – 2014-11-26 00:31:19

回答

2

參見例如discussion at Julia commit e7ce4cba44fa3b508fd50e0c3d03f6bc5a7a5032:當前約定是函數突變,因此如果它將其中一個參數更改爲==,則會附加!

(但有一些理由更寬泛的定義,以及;見上述討論)。

+0

謝謝您的回覆,但這並不能完全回答我的問題。正在考慮的論點可能甚至沒有定義一個工作的==(如我的例子)。但即使我們將定義拓寬爲*等於外部可見行爲*(通過某個定義的接口),這並不能回答我的任何觀點,因爲當等式應該成立時,它沒有提及*。 最接近的部分是關於併發性的部分,但這是模糊的,遠非慣例。 無論如何,這個鏈接是有用的,所以+1。 – user4235730 2014-12-12 21:15:33