我在編寫需要選項的函數時遇到了一些問題。其中一個選項值是一個函數。我有一個得到這個價值,但保持它未評估。我嘗試了我可能想到的每一件事,但迄今爲止沒有任何工作。在Mathematica中未評估選項的值爲
基本上,說明這是我的嘗試:
SetAttributes[Foo, HoldRest];
Options[Foo] = {Blah -> None}
Foo[x_, OptionsPattern[]] :=
Module[{blah},
blah = OptionValue[Automatic, Automatic, Blah, Hold];
.
.
.
後來,當我有:
func[a_, b_, c_] := a + b + c;
我希望能夠調用美孚與:
Foo[2, Blah -> func[1, 2, 3]]
並且將「blah」變量(在Foo內部)進行未評估,即blah = func [1,2,3]。
感謝您提前提供的所有幫助!
編輯:
對於太長闡述的原因,我不能使用RuleDelayed(:>)。我正在嘗試編寫一個函數,該函數將被其他人使用,這些人不太瞭解Mathematica,因此他們不知道:>是。使用規則( - >)來指定選項及其值是標準方法,並且他們熟悉這一點。
所以爲了進一步說明,讓我們說,我試圖寫一個號碼發生器函數,它產生的實際數量作爲它的一個選項的功能:現在
Options[GenerateNumbers] = {GeneratorFunction -> None};
GenerateNumbers[n_, OptionsPattern[]] :=
Module[{func},
func = OptionValue[GeneratorFunction];
Table[func, {n}]
]
]
,如果我叫這個用的值作爲函數如下:
GenerateNumbers[5, GeneratorFunction -> RandomReal[10]]
這將返回5個數字是相同的列表,因爲RandomReal [10]被計算一次,而不是在每一個表的迭代。我想阻止這一點。這個問題更復雜,但也是這樣。
謝謝!
+1,這是一個非常有趣的想法。 – rcollyer 2011-02-18 16:45:13