Предположим, у меня есть функция с необязательными именованными аргументами, но я настаиваю на том, чтобы ссылаться на аргументы по их неприукрашенным именам.
Рассмотрим эту функцию, которая добавляет два именованных аргумента, a и b:
Options[f] = {a->0, b->0}; (* The default values. *)
f[OptionsPattern[]] :=
OptionValue[a] + OptionValue[b]
Как я могу написать версию этой функции, в которой последняя строка заменена просто a+b
? (Представьте, что a+b
— это целый набор кода.)
Ответы на следующий вопрос показывают, как сократить OptionValue
(проще сказать, чем сделать), но не как полностью от него избавиться: in-mathematica">Необязательные именованные аргументы в системе Mathematica
Философское дополнение: кажется, что если Mathematica собирается иметь эту магию с OptionsPattern
и OptionValue
, она могла бы также пойти до конца и иметь языковую конструкцию для правильного выполнения именованных аргументов, где вы можете просто ссылаться на них, вы знаете, их имена . Как и любой другой язык с именованными аргументами. (А пока мне любопытно, какие обходные пути возможны...)