Предположим, что у меня есть функция с необязательными именованными аргументами, но я настаиваю на том, чтобы ссылаться на аргументы по их ненакрашенным именам.Необязательные именованные аргументы, не обертывая их все в «OptionValue»
Рассмотрим эту функцию, которая добавляет два своих именованных аргументов, а и б:
Options[f] = {a->0, b->0}; (* The default values. *)
f[OptionsPattern[]] :=
OptionValue[a] + OptionValue[b]
Как я могу написать версию этой функции, где, что последняя строка заменяется просто a+b
? (. Представьте себе, что это a+b
это целая куча кода)
Ответы на следующий вопрос показывают, как сокращайте OptionValue
(проще сказать, чем сделать), но не так, как от нее избавиться совсем: Optional named arguments in Mathematica
Философское приложение: похоже, что если Mathematica будет иметь эту магию с OptionsPattern
и , она также может пройти весь путь и иметь конструкцию языка для правильного ввода именованных аргументов, где вы можете просто ссылаться на них, вы знаете, их имена , Как и любой другой язык с именованными аргументами. (И в то же время, мне очень интересно, что обходные пути возможно ...)
Это впечатляет. Вы должны быть хакером Lisp. Большое спасибо за помощь! Я думаю, что я в порядке с ограничением, что именованные параметры не имеют глобальных значений, поскольку это ограничение в обычном способе именованных аргументов. – dreeves
@dreeves: Lisp/Scheme/Clojure находится в моем списке желаний. Увы, нет времени. Mathematica был моим первым языком, который я получил seriosly. На самом деле я тоже долгое время раздражался необходимостью обертывания OptionValue все время, но ваш вопрос побудил меня, наконец, что-то сделать. Я, скорее всего, начну использовать это сам. –
@ Leonid: Очень круто. Хотя теперь мне интересно, в свете обновления Бретта к его ответу, если стоит использовать этот волосатый макрос. – dreeves