【发布时间】:2011-06-14 00:01:10
【问题描述】:
可以为函数的参数设置Default 值:
Default[f] = 5;
然后使用:
f[a_, b_.] := {a, b}
f[1, 2]
f[1]
{1, 2}
{1, 5}
这将创建以下值:
DefaultValues[f]
DownValues[f]
{HoldPattern[Default[f]] :> 5}
{HoldPattern[f[a_, b_.]] :> {a, b}}
由此可能会认为5 的值在f 的定义中并不固定,而是针对DefaultValues 赋值。但是,如果我们直接更改DefaultValues,或者使用:
Default[f] = 9;
DefaultValues[f]
{HoldPattern[Default[f]] :> 9}
并再次使用f:
f[1]
{1, 5}
我们看到新值没有被使用。
因此,我的问题是:
为什么
f[a_, b_.] := {a, b}使用的默认值不随DefaultValues变化?真正的默认值 (
5) 存储在哪里,因为它既没有出现在DownValues或DefaultValues中?
【问题讨论】:
-
+1 很好很清晰。让我们希望得到同样的答案!
-
W:您没有将默认值定义为
f[a_,b_:5]:=...的任何原因? -
@yoda:因为idea 能够在需要时更改默认值。
-
@yoda 另外,如果
Default值很长和/或经常使用,那么写_.会更简洁。 -
我正在添加 [bugs] 标签。如果其中一位 WRI 开发人员想解释为什么这不是错误,我会删除它。