Можно задать значение 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
?