2017-07-30 80 views

回答

7

在朱莉婭,這是一個約定append ! to names of functions that modify their arguments。原因是Julia函數的參數是passed-by-sharing,沒有這個約定,知道函數是否會改變輸入參數的內容並不容易。

+0

我正在閱讀這段代碼,那麼爲什麼程序員在函數的定義之後添加了函數的另一個副本,沒有'!'?像'operator(V :: Matrix; policy = false)= operator!(V,similar(V); policy = policy)' – ReD

+1

@ReD如何實現'operator!'? – Gnimuc

+2

>爲什麼程序員添加了另一個函數副本,沒有!函數的定義之後? 因爲沒有!的功能!是不可變的 - 也就是說,它不會改變它的任何輸入。請注意,它創建了一個單獨的矩陣(通過類似的(V)),它在運算符!()中發生了變異,但不會返回它。如果你調用operator(),你的輸入都不會改變。如果您調用operator!(),則至少有一個輸入(即第二個輸入)會發生變異。 – sbromberger