gpt4 book ai didi

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

转载 作者:太空宇宙 更新时间:2023-11-03 19:10:09 25 4
gpt4 key购买 nike

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

这似乎没有记录在 MathWorks 网站上。调皮!

最佳答案

背景

属性值对的属性部分通常可以缩短到属性字符串的开头,只要它仍然是唯一可识别的(请参见下面的示例)。它们通常也不区分大小写。
据我所知,除了图形属性外,没有记录任何其他内容,其中 is very briefly documented.

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

问题变成了还有哪些其他属性......

  • 对于某些功能没有很好的文档记录...(而且很多都是内置或混淆的 .p 文件,因此无需检查源代码)。
  • 最重要的是,我们无法知道 future 的版本是否会引入新的属性

出于这个原因,不建议使用缩短的属性名称,引用

"using the full property name can prevent problems with futures releases of MATLAB if a shortened name is no longer unique because of the addition of new properties." - Matlab documentation

"Don't shorten your code with P-V abbreviations, it's not worth it, trust me." – Sam Roberts

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


使用图形属性的例子

  1. 简单的缩短

以下

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

on

可以缩短为

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

on

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

  1. 独特性

然而,其他以类似方式开头的属性,例如CurrentAxesCurrentCharacter & CurrentObject

get(Hfig,'Current')

Error using get
Ambiguous property found.
Object Name: figure
Property Name: 'Current'.

因为 'currenta''currenc''currento' 是唯一可识别的并且会按预期工作

  1. 不可能缩短

特别提到 ColorColorMap 等属性,其中一个的名称是另一个的开头Color 只能与其全名一起使用,因为任何缩写都与 ColorMap 不明确'ColorMap' 可以缩写为 'colorm' 但是,和以前一样。


反例

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

半未记录的 hardcopy 有一些有趣的行为,文档将可能的选项描述为 -dps、-deps、-dps2、-deps2、-dill、-dhpgl

但是 '-dh' 会产生一个错误,因为 '-di' 作为缩写 '-dill' 可悲的是没有检查源代码以了解原因,因为它是一个 .p 文件

最后,cellfun 本身并不完全遵循那里的规则,因为如果遵循上述规则,'u' 理论上应该可以工作,但是只有 'un' 及以后的代码。

关于matlab - 使用参数值输入对的缩写 - 为什么 cellfun 的 `' UniformOutput', false` 工作为 `' un', 0`?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/25907412/

25 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com