Проблема с получением значения опции (OptionValue[])

Форум пользователей пакета Mathematica

Модератор: Admin

AGluk
Сообщения: 22
Зарегистрирован: Пт ноя 09, 2007 10:19 pm
Откуда: Московская область, г.Воскресенск
Контактная информация:

Проблема с получением значения опции (OptionValue[])

Сообщение AGluk » Чт дек 02, 2010 5:48 pm

Здравствуйте.
Возник вопрос, который меня просто поставил в тупик, не могу ничего придумать... помогите, пожалуйста, разобраться.
Необходимо хранить у символа опцию (параметр), которую можно было бы при необходимости прочитать при помощи функции:

Код: Выделить всё

OptionValue[символ, имя_параметра]


До присвоения данному символу чего-либо все работает отлично (см. приложенный файл). После - я уже не могу обратиться к данному символу, т.к. Mathematica сначала подставляет только что присвоенное данному символу значение, а потом уже обрабатывает функцию OptionValue[], которая естественно же не может найти данного параметра у совсем другого символа (см. приложенный файл).
Можно ли как-то решить данную проблему? Очень нужно. Буду благодарен за любые предложения. Большое спасибо!

Изображение
Последний раз редактировалось AGluk Пт дек 03, 2010 10:23 am, всего редактировалось 1 раз.

Gordon
Сообщения: 300
Зарегистрирован: Вт сен 08, 2009 8:16 pm

Сообщение Gordon » Чт дек 02, 2010 8:58 pm

Достаточно сделать следующее:

Код: Выделить всё

SetAttributes[OptionValue, HoldFirst]

AGluk
Сообщения: 22
Зарегистрирован: Пт ноя 09, 2007 10:19 pm
Откуда: Московская область, г.Воскресенск
Контактная информация:

Сообщение AGluk » Пт дек 03, 2010 9:25 am

Большое Вам спасибо!
Действительно работает как надо.
Но теперь половина других встроенных функций стала возмущаться, т.к. не может получить значения опций. Можно ли как то это сделать только на время вызова? Или надо каждый раз перед вызовом добавлять атрибут, а после удалять? Спасибо еще раз.

AGluk
Сообщения: 22
Зарегистрирован: Пт ноя 09, 2007 10:19 pm
Откуда: Московская область, г.Воскресенск
Контактная информация:

Сообщение AGluk » Пт дек 03, 2010 10:21 am

Вроде как такой вариант годится:

Код: Выделить всё

OptionValue[Unevaluated[x], someOption]

Изображение