我们可以为函数的参数设置默认值
:
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
中?
f[a_,b_:5]:=...
呢? - user616736