prog
:: getOptions
Получите и проверьте опции в рамках процедуры
Блокноты MuPAD® будут демонтированы в будущем релизе. Используйте live скрипты MATLAB® вместо этого.
Live скрипты MATLAB поддерживают большую часть функциональности MuPAD, хотя существуют некоторые различия. Для получения дополнительной информации смотрите, Преобразовывают Notebook MuPAD в Live скрипты MATLAB.
prog::getOptions(n
, arguments
, allOptions
, <ErrorOnUnexpected
>, <optionTypes
>)
prog::getOptions
, названный в рамках процедуры, собирает и проверяет все опции из списка аргументов процедуры вызова.
Когда вы пишете свою собственную процедуру, prog::getOptions
позволяет вам встроить набор и верификацию всех опций процедуры. Когда пользователь вызывает вашу процедуру, prog::getOptions
сканирует все аргументы и обеспечивает структуру данных, которая содержит все значения опции. Смотрите Пример 1.
Функция prog::getOptions
возвращает список, который содержит таблицу всех допустимых опций наряду с их значениями и списка неожиданных аргументов. Для ожидаемых опций prog::getOptions
возвращает следующие значения:
Если опция может иметь только TRUE
или значения FALSE
, пользователь вашей процедуры может обеспечить имя опции, вместо того, чтобы обеспечить пару значения опции. Если пользователь предоставляет возможность, не задавая ее значение, prog::getOptions
возвращает булево значение TRUE
для той опции. Смотрите Пример 2.
prog::getOptions
возвращает список с двумя компонентами: таблица ожидаемых опций и списка неожиданных аргументов. Можно получить доступ к компонентам того списка отдельно при помощи индексного оператора (см. _index
). Смотрите Пример 3.
По умолчанию функция prog::getOptions
не делает ошибки, когда это находит неожиданный аргумент. Чтобы переключиться на издание ошибок на неожиданных аргументах, используйте параметр ErrorOnUnexpected
. Смотрите Пример 4.
Процедура, которая включает prog::getOptions
, должна принять аргументы в следующем порядке: сначала обязательные параметры, и затем все опции. Функция prog::getOptions
позволяет вам задать номер n
аргумента, от которого функция начинает проверять опции. Функция prog::getOptions
принимает, что первые аргументы n - 1
являются параметрами и, поэтому, не проверяет их. Смотрите Пример 5.
Параметр optionTypes
позволяет вам задать приемлемые типы для значений опции. Можно задать приемлемые типы для некоторых или всех ожидаемых возможностей, предоставленных в таблице allOptions
. Смотрите Пример 6.
Первые три параметра prog::getOptions
(n
, arguments
и allOptions
) требуются. ErrorOnUnexpected
и optionTypes
являются дополнительными. Необходимо обеспечить параметры prog::getOptions
с помощью порядка, показанного в разделе Calls этой страницы. Поэтому, если вы хотите использовать пятый параметр optionTypes
, также необходимо явным образом использовать четвертый параметр ErrorOnUnexpected
.
Второй параметр функции prog::getOptions
, arguments
, является списком всех аргументов вашей процедуры. prog::getOptions
сканирует аргументы, обеспеченные в том списке. Несмотря на то, что prog::getOptions
принимает любой список как второй аргумент, процедура вызова всегда должна предоставлять список всех своих аргументов (и параметры и опции), чтобы избежать потенциальных ошибок. Синтаксис [ args()]
предоставляет список всех аргументов процедуры вызова. Смотрите Пример 7.
Чтобы встроить набор опции и шаг верификации в вашу процедуру, вызовите функцию prog::getOptions
в рамках той процедуры. Чтобы протестировать поведение prog::getOptions
, создайте функциональный f
, который вызывает prog::getOptions
, чтобы отсканировать и проверить аргументы f
. Например, создайте функциональный f
, который принимает только одну опцию All
:
f := () -> prog::getOptions(1, [args()], table(All = TRUE)):
prog::getOptions
возвращает список. Первая запись списка является таблицей, содержащей все ожидаемые опции и их значения. Вторая запись является списком неожиданных аргументов. Например, вызов функции f()
не содержит неожиданных аргументов:
f();
Вызов функции f(Unexpected)
содержит неожиданный аргумент Unexpected
:
f(Unexpected);
Когда пользователи вызывают процедуру, которая включает prog::getOptions
, они могут задать новые значения для любой из допустимых опций той процедуры. В этом случае prog::getOptions
возвращает новые значения. Если пользователь использует опцию, не задавая ее значение, prog::getOptions
возвращает булево значение TRUE
для той опции. Если пользователь явным образом не использует ожидаемую опцию, prog::getOptions
возвращает значение по умолчанию той возможности, предоставленной в таблице allOptions
. Например, в вызове функции f(Proc = op, Warning)
, функция prog::getOptions
возвращает следующие значения:
Если пользователь обеспечивает значение для опции, prog::getOptions
возвращает то значение.
Если пользователь не использует опцию в вызове процедуры, prog::getOptions
возвращает значение по умолчанию для той опции.
f := () -> prog::getOptions(1, [args()], table(All = FALSE, Proc = id, Warning = FALSE))[1]: f(Proc = op, Warning)
Чтобы получить доступ к таблице ожидаемых опций и списка неожиданных аргументов отдельно, используйте индексный оператор (см. _index
):
f := () -> prog::getOptions(1, [args()], table(All = TRUE))[1]: g := () -> prog::getOptions(1, [args()], table(All = TRUE))[2]: ExpectedOptions = f(Unexpected); UnexpectedOptions = g(Unexpected)
Когда пользователь предоставляет неожиданные аргументы к вашей процедуре, prog::getOptions
может собрать эти аргументы и возвратить их как список. Кроме того, prog::getOptions
может остановиться и выдать ошибку, когда он находит первый неожиданный аргумент. Чтобы выдать ошибку вместо того, чтобы перечислить неожиданные аргументы, используйте TRUE
в качестве четвертого параметра prog::getOptions
:
f := () -> prog::getOptions(1, [args()], table(All = TRUE), TRUE): f(Unexpected)
Error: Invalid argument number 1. Evaluating: f
Функция prog::getOptions
не отличает параметры от опций автоматически. Если некоторые аргументы процедуры являются параметрами, исключают их из верификации опции. В противном случае функция prog::getOptions
перечисляет те параметры как неожиданные аргументы. Например, списки 1 и 2 prog::getOptions
в качестве неожиданных аргументов вызова функции f(1, 2, All)
:
f := () -> prog::getOptions(1, [args()], table(All = TRUE))[2]: UnexpectedOptions = f(1, 2, All);
Если вы установите функцию prog::getOptions
на ошибку на неожиданных аргументах, это будет ошибка на параметрах также:
f := () -> prog::getOptions(1, [args()], table(All = TRUE), TRUE): f(1, 2, All);
Error: Invalid argument number 1. Evaluating: f
Чтобы исключить первые параметры n
функции от верификации опции, предоставьте номеру n + 1
в качестве первого аргумента prog::getOptions
. В вызове функции задайте все параметры n
, прежде чем вы зададите опции. Например, чтобы не проверять первые два аргумента в вызов функции f(1, 2, All)
, используйте следующий синтаксис:
f := () -> prog::getOptions(3, [args()], table(All = TRUE))[2]: UnexpectedOptions = f(1, 2, All);
Когда вы используете prog::getOptions
, необходимо обеспечить все обязательные параметры сначала, и затем предоставить возможности. Следующий синтаксис не работает, потому что prog::getOptions
принимает, что первые два аргумента в вызове функции, f(1, All, 2)
является параметрами и номером 2, являются опцией:
f := () -> prog::getOptions(3, [args()], table(All = TRUE), TRUE): f(1, All, 2);
Error: Invalid argument number 3. Evaluating: f
Чтобы задать приемлемые типы значений опции, используйте таблицу, которая содержит приемлемые опции как индексы и их ожидаемые типы как записи. Например, укажите, что опция All
должна иметь тип DOM_BOOL
, и опция Proc
должна иметь тип Type::Function
:
f:= () -> prog::getOptions(1, [args()], table(All = TRUE, Proc = id), TRUE, table(All = DOM_BOOL, Proc = Type::Function) )[1]:
Теперь, опции могут иметь только значения правильных типов:
f(All = FALSE, Proc = id)
При попытке использовать значение неправильного типа, функция выдает ошибку:
f(All = FALSE, Proc = 0)
Error: Invalid type of argument number 2. Evaluating: f
Кроме того, можно задать и использовать процедуру для того, чтобы выполнить проверку типа. Для аргументов допустимого типа процедура должна возвратить TRUE
или выражение, которое может быть выполнено к TRUE
функцией bool
:
f := () -> prog::getOptions( 2, [args()], table(File = ""), TRUE, table(File = (X -> contains({DOM_STRING, DOM_INT}, type(X)))) )[1]: f(FALSE, File = 0), f(TRUE, File = "test.log")
Используя arguments
, чтобы разделить опции от параметров не рекомендуется, потому что он может привести к ошибкам. Всегда используйте первый параметр prog::getOptions
, чтобы задать, сколько параметров вы имеете. Несмотря на то, что прогр:: getOptions принимает любой список как второй аргумент, лучшая практика состоит в том, чтобы использовать только args()
. Следующий пример demostrates, что использование arguments
, чтобы разделить опции от параметров может привести к неправильному сообщению об ошибке. Несмотря на то, что это сообщение об ошибке правильно указывает, что одна из опций имеет значение неправильного типа, индекс аргумента является неправильным:
f := () -> prog::getOptions(1, [args(2..args(0))], table(Option1 = TRUE), TRUE, table(Option1 = DOM_BOOL)): f(x, Option1 = 1, Option2)
Error: Invalid type of argument number 1. Evaluating: f
Чтобы получить правильное сообщение об ошибке для этого примера, используйте первый параметр prog::getOptions
, чтобы исключить x
из верификации опции:
f := () -> prog::getOptions(2, [args()], table(Option1 = TRUE), TRUE, table(Option1 = DOM_BOOL)): f(x, Option1 = 1, Option2)
Error: Invalid type of argument number 2. Evaluating: f
|
Положительное целое число, которое задает количество права преимущественной покупки в списке аргументов. При вызове процедуры пользователь должен предоставить всем обязательным параматерям перед опциями. |
|
Список всех аргументов процедуры. Используйте |
|
|
|
Булев постоянный |
|
|
Перечислите, который содержит таблицу и список. Таблица содержит все допустимые опции процедуры вызова и их значений. Для ожидаемых опций, которые не заданы в процедуре, значения являются своими значениями по умолчанию. Список содержит все неожиданные аргументы в процедуре.