我在编写需要选项的函数时遇到了一些问题。其中一个选项值是一个函数。我有一个得到这个价值,但保持它未评估。我尝试了我可能想到的每一件事,但迄今为止没有任何工作。在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