Warning: file_get_contents(/data/phpspider/zhask/data//catemap/6/asp.net-mvc-3/4.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Matlab 为参数值输入对使用缩写-为什么cellfun';s`';统一输出';,假`作为`'工作;联合国;,0`?_Matlab - Fatal编程技术网

Matlab 为参数值输入对使用缩写-为什么cellfun';s`';统一输出';,假`作为`'工作;联合国;,0`?

Matlab 为参数值输入对使用缩写-为什么cellfun';s`';统一输出';,假`作为`'工作;联合国;,0`?,matlab,Matlab,作为cellfun(…,'UniformOutput',false)的经常用户,我惊讶地发现后两个参数可以作为cellfun(…,'un',0)输入。这立即缩短了我的代码。我的问题是,还有其他类似的快捷方式/别名吗 MathWorks网站上似乎没有记录这一点。淘气 如果例程使用MATLAB的inputParser功能,则通常可以缩短任何参数名称,使其仍然清晰,并且不区分大小写。对象的属性也是如此,例如get(gcf,'pos')作为get(gcf,'Position')的较短版本 但是,我不知道

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


MathWorks网站上似乎没有记录这一点。淘气

如果例程使用MATLAB的
inputParser
功能,则通常可以缩短任何参数名称,使其仍然清晰,并且不区分大小写。对象的属性也是如此,例如
get(gcf,'pos')
作为
get(gcf,'Position')
的较短版本

但是,我不知道是否有关于这个用法的文档,我建议您试试看

0
通常相当于
false
(非零表示
true

PS我建议在命令行中使用这些快捷方式可以,但在编写函数和脚本时,最好使用全名。

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

然而,在许多采用属性-值对参数的MathWorks函数中,以及在一些采用无值对的字符串参数的函数中,也实现了这种行为

问题变成了还有什么其他属性

  • 因为有些函数没有很好的文档记录。。。(许多人不是 内置或模糊的.p文件,因此无需检查源代码)
  • 最重要的是,我们无法知道未来的版本是否会引入新功能 财产
出于这个原因,建议不要使用缩短的属性名称

“如果由于添加了新属性,缩短的名称不再是唯一的,则使用完整属性名称可以防止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'
    ,但与前面一样


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

    半无文档的
    硬拷贝有一些有趣的行为,文档中列出了可能的选项,如-dps、-deps、-dps2、-deps2、-dill、-dhpgl

    但是,
    '-dh'
    创建了一个错误,其中as
    '-di'
    作为缩写的
    '-dill'
    工作。遗憾的是,由于它是一个.p文件,因此无法检查源代码以了解原因


    最后,
    cellfun
    本身并不完全遵循这些规则,因为如果遵循上述规则,
    'u'
    理论上应该有效,但是只有
    'un'
    及以后的规则有效

    所以有一些方法可以解决这个问题;非常感谢您的解释。我应该补充说,
    cellfun
    也稍微打破了这一点,因为
    'u'
    虽然看起来唯一可识别并不起作用…+1我有完全相同的怀疑。现在我看到一个确认,或者至少是一个类似的观点,将脚本中的每个属性字符串排序到所需的最小值对于试图调试函数的人来说是一个有趣的恶作剧:)PS参数值缩写是一个可怕的设计选择,我真的鼓励每个人在代码中永远不要使用或支持它们。假设您编写了一些使用
    cellfun(…,'un',false)
    的代码。在MATLAB的下一个版本中,MathWorks为cellfun
    引入了一个新选项,可能称之为“单元”——这对他们来说是一件非常好的事情,因为它不是现有的选项。突然,所有代码都中断了,因为您使用的缩写不再是明确的。不要用P-V缩写来缩短代码,这不值得,相信我。明白了,非常感谢你的解释。我将去看看inputParser,以了解更多信息。