西蒙的方法的細微變化是在函數使用一個默認值,而不是一個全局變量($Center
)。
假設你的默認原點是(5,5),則:
myNorm[pos:{_, _}, center_:{5, 5}] := EuclideanDistance[pos, center]
注意使用_:{5, 5}
定義默認值。
現在你可以這樣做:
myNorm[{5, 7}]
(* Out[]= 2 *)
或臨時使用不同的中心與:
myNorm[{5, 7}, {8, 8}]
(* Out[]= Sqrt[10] *)
對於這個簡單的功能,你可以在第二種情況下使用EuclideanDistance
代替,但我希望你可以看到這種方法的效用是更復雜的定義myNorm
。
該方法的缺點是不能輕易更改默認中心。
這的確讓人們輕易地更改默認的中心,但更詳細的另一個變化,是使用Options
:
Options[myNorm2] = {Center -> {5, 5}};
myNorm2[pos : {_, _}, OptionsPattern[]] :=
EuclideanDistance[pos, OptionValue[Center]]
語法是:
myNorm2[{5, 7}]
myNorm2[{5, 7}, Center -> {8, 8}]
2
Sqrt[10]
更改默認的c輸入:
SetOptions[myNorm2, Center -> {8, 8}];
myNorm2[{5, 7}]
Sqrt[10]
@ 500不用客氣。請參閱我的更新的答案另一種方法。 – 2011-06-12 22:46:28
我在第一個版本中用'Default'完成了同樣的錯誤。在我注意到我剛纔在頂部發表評論時說:「如果更改$ xyz,則需要重新定義以下內容......」! – Simon 2011-06-13 23:01:18
@Simon如果它有我們兩個,我會發佈一個關於這個問題。 「DefaultValues [f]」沒有效果而改變的事實令人困惑。 – 2011-06-13 23:45:29