cellfun(..., 'UniformOutput', false)
的用户,我很惊讶地发现后两个参数可以输入cellfun(..., 'un', 0)
。这立即缩短了我的代码。我的问题是,是否还有其他类似的快捷方式/别名可用?这似乎没有在MathWorks网站上记录下来。坏坏的!
cellfun(..., 'UniformOutput', false)
的用户,我很惊讶地发现后两个参数可以输入cellfun(..., 'un', 0)
。这立即缩短了我的代码。我的问题是,是否还有其他类似的快捷方式/别名可用?属性-值对的属性部分通常可以缩短为属性字符串的开头,只要它仍然是唯一可识别的(请参见下面的示例)。它们也经常不区分大小写。
据我所知,这仅适用于图形属性以外的任何内容都没有记录在案(请点击此处了解详情)。
然而,在许多接受属性-值对参数的 The MathWorks 函数中,此行为也被实现,并且在某些接受没有值对的字符串参数的函数中也是如此。
问题在于其他有哪些属性...
出于这个原因,不建议使用缩短的属性名称,引用Matlab文档的话:
"如果由于添加了新属性而缩短名称不再唯一,则使用完整的属性名称可以防止 MATLAB 的未来版本出现问题。" - Matlab文档
"不要使用 P-V 缩写缩短代码,这是不值得的,相信我。" – Sam Roberts
稍微技术一点的说明——Matlab 的 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'和以后才有效。
get(gcf,'pos')
是get(gcf,'Position')
的一个较短的版本。0
通常等同于false
(非零等于true
)。
cellfun
也会稍微打破这个规则,因为虽然'u'
看起来是唯一可识别的,但它不起作用... - RTLcellfun(..., 'un', false)
的代码。在 MATLAB 的下一个版本中,MathWorks 引入了一个新选项到cellfun
中,可能称之为'Unit'
- 这对他们来说是完全可以的,因为这不是现有的选项。突然间,你所有的代码都崩溃了,因为你使用的缩写不再是无歧义的。不要用 P-V 缩写缩短你的代码,相信我,这不值得。 - Sam Roberts