使用参数值输入对的缩写 - 为什么cellfun的''UniformOutput',false`工作为'un',0`?

Der*_*rek 15 matlab

作为频繁使用者cellfun(..., 'UniformOutput', false),我惊讶地发现后两个参数可以输入为cellfun(..., 'un', 0).这立即缩短了我的代码.我的问题是,那里还有其他类似的快捷方式/别名吗?

这似乎没有在MathWorks网站上记录.淘气!

RTL*_*RTL 12

背景

Property-value对的属性部分通常可以缩短到属性字符串的开头,只要它仍然是唯一可识别的(参见下面的示例).它们通常也不区分大小写.
据我所知,除了图形属性之外,没有任何其他文档记录,其中非常简要地记录了它.

但是,这种行为也在许多采用属性 - 值对参数的MathWorks函数中实现,并且在一些函数中实现,这些函数采用不带值对的字符串参数.

问题变成了其他房产......

  • 对于某些函数没有很好的文档...(并且许多函数是内置的或混淆的.p文件,因此不检查源代码).
  • 最重要的是,我们无法知道未来的版本是否会引入新的属性.

因此,建议使用缩短的属性名称

"如果由于添加了新属性,缩短的名称不再是唯一的,那么使用完整的属性名称可以防止MATLAB的期货版本出现问题." - Matlab文档

" 不要用PV缩写缩短代码,不值得,相信我." - 山姆罗伯茨

简短的技术方面 - 此功能默认由Matlabs实现inputParser,但是它可以被禁用,因此这些缩写不能保证适用于每个功能.只有那些inputParser以这种方式使用或者是专门写的才允许这样做.


使用图属性的示例

  1. 简单缩短

下列

hFig = figure();
get(Hfig,'Visible')
ans =

on
Run Code Online (Sandbox Code Playgroud)

可以缩短为

hFig = figure();
get(Hfig,'v')
ans =

on
Run Code Online (Sandbox Code Playgroud)

因为它是在开始的唯一属性'v'(注意'vi','vis'等...也可以)

  1. 唯一性

然而,其他属性开始类似,例如CurrentAxes,CurrentCharacter&CurrentObject

get(Hfig,'Current')

Error using get
Ambiguous property found.
Object Name: figure
Property Name: 'Current'.
Run Code Online (Sandbox Code Playgroud)

在哪里'currenta','currentc'并且'currento'是唯一可识别的并且可以按预期工作

  1. 不可能缩短

特别值得一提至如属性ColorColorMap一个名称是另一个开始 Color只能与它的全名可以使用,由于任何正在缩短与暧昧ColorMap 'ColorMap'可以短到'colorm'像以前一样但是,.


反例

本节旨在通过展示一些看似不可预测意外的行为来阻止使用缩短的属性值对.

半文档hardcopy有一些有趣的行为文档说明可能的选项-dps,-deps,-dps2,-deps2,-dill,-dhpgl

然而,'-dh'创建一个错误,其中作为'-di' 缩写工作,'-dill'遗憾的是没有检查源,看看为什么,因为它是.p文件

最后,如果遵循上述规则,cellfun本身并不完全遵循规则,'u'理论上应该遵循规则,但是只有'un'前后规则.

  • PS参数值缩写是一个*可怕的*设计选择,我真的鼓励每个人*从不*在他们的代码中使用或支持它们.想象一下,你已经编写了一些使用`cellfun(...,'un',false)`的代码.在MATLAB的下一个版本中,MathWorks为`cellfun`引入了一个新选项,可能称之为''Unit' - 这对他们来说是一件非常好的事情,因为它不是现有选项.突然间你的所有代码都断了,因为你使用的缩写不再是明确的.*不要用PV缩写缩短你的代码,不值得,相信我.* (2认同)