Ответ 1
Фон
Часть свойств пары Property-value часто может быть сокращена до начала строки свойств до тех пор, пока она все еще однозначно идентифицируется (см. примеры ниже). Они также часто не чувствительны к регистру.
Насколько я знаю, это не документировано ничем иным, кроме свойств фигуры, где он очень кратко документирован.
Однако это поведение также реализовано во многих функциях MathWorks, которые принимают аргументы пары свойств и значений, а также в некоторых функциях, которые принимают строковые аргументы без пары значений.
Проблемы становятся тем, что есть другие свойства...
- Для некоторых функций недостаточно хорошо документировано... (и многие из них встроенные или обфусканные .p файлы, поэтому не проверяйте источник).
- Самое главное, что мы не можем знать, свойства.
Использование сокращенных имен свойств рекомендуется по этой причине, чтобы процитировать
", используя полное имя свойства, может предотвратить проблемы с выпуском фьючерсов MATLAB, если сокращенное имя больше не уникально из-за добавления новых свойств." - Документация Matlab
"Не сокращайте свой код с помощью сокращений P-V, это не стоит, поверьте мне". - Сэм Робертс
Краткая техническая сторона. Эта функциональность реализована по умолчанию Matlabs inputParser
, однако ее можно отключить, чтобы эти сокращения никоим образом не гарантировали работу над каждой функцией. Только те, которые используют inputParser
таким образом или специально написаны, чтобы разрешить это.
Примеры с использованием свойств фигуры
- Простое сокращение
Следующие
hFig = figure();
get(Hfig,'Visible')
ans =
on
можно сократить до
hFig = figure();
get(Hfig,'v')
ans =
on
поскольку это единственное свойство, начинающееся с 'v'
(обратите внимание, что 'vi'
, 'vis'
и т.д. также работают)
- Единственность
Однако другие свойства, которые начинаются аналогично, например, CurrentAxes
, CurrentCharacter
и CurrentObject
get(Hfig,'Current')
Error using get
Ambiguous property found.
Object Name: figure
Property Name: 'Current'.
Где в качестве 'currenta'
, 'currentc'
и 'currento'
однозначно идентифицируются и будут работать как предполагалось
- Невозможно сократить
Особое упоминание о свойствах, таких как Color
и ColorMap
, имя одного - это начало другого
Color
может использоваться только со своим полным именем из-за того, что любое сокращение является двусмысленным с ColorMap
'ColorMap'
может быть закорочен до 'colorm'
, как и раньше.
Примеры счетчиков
Этот раздел предназначен для обескуражить использование сокращенных пар значений свойств, показывая некоторые из кажущихся непредсказуемым и неожиданным поведением.
В полу-недокументированном hardcopy
есть интересное поведение, в документации указаны возможные варианты: -dps, -deps, -dps2, -deps2, -dill, -dhpgl
Однако '-dh'
создает ошибку, когда '-di'
работает как сокращенный '-dill'
грустно, нет проверки источника, чтобы узнать, почему, поскольку это файл .p)
Наконец, cellfun
сам точно не соблюдает правила, поскольку 'u'
должен теоретически работать, если следовать правилам выше, однако только 'un'
и далее.