【发布时间】:2017-03-08 09:03:55
【问题描述】:
我想在函数f(a,b,c,d) 上使用 inputParser,其中 a 是必需的,b-d 是可选的。我想保留 b-d 命名 = 不使用 f(a, varargin),因为当您真正想要使用该函数时,该 varargin 不会告诉您任何内容。除非给出所有 4 个参数,否则简单的 p.parse(a,b,c,d) 显然不起作用。
我知道如何做到这一点的唯一方法是使用setDefaultValue(argname, value),然后在需要时使用p.parse(...) 进行检查。但是有没有一种简单的方法来破解这个只使用 inputParser(没有大量的 ifs)?
作为一个附带问题,没有简单的方法可以像在 MATLAB 中的 C# 中那样执行命名参数,对吧?所以我会拥有f(a,b,c,d) 并照此使用。第一个参数是 a,然后是 b,然后是 c ...但是当用户想像 f(a, 'd', 3, 'c', 2) 一样调用它时,他可以。在此示例中,他将保留默认值 b,并为 d 使用 3,为 c 使用 2。当然,没有大量工作在我这边 - 我知道该怎么做,编写自己的解析,但我想要一个更简单的解决方案(就像其他人的解析:))
【问题讨论】:
-
“因为当你真正想使用这个函数时,varargin 并没有告诉你任何事情”。那就写文档吧!不要因为你懒写10行cmets就破坏MATLAB
-
@AnderBiguri 我确实写过文档,但我个人觉得在写函数名时查看函数所需的参数非常有帮助。因此,我尝试向我的代码的用户提供相同的功能。说我的矩形(中心,高度,宽度)。看到参数名称通常就足以知道您应该输入哪一个,甚至不需要打开帮助或文档。然后在文档中列出所有选项、默认值等,以及函数的确切作用、示例等。
-
MATLAB 显示了这一点。它将显示
f(a,b,...),然后是“更多帮助”的链接 -
@AnderBiguri 当函数定义为
f(a,varargin)时,它将显示为f(a,...),这没有多大帮助 - 您需要打开帮助才能查看b、c的顺序和d(或在myRectangle 示例中为height和width)。因此,在主要使用名称/值对或很少使用可选参数时,我倾向于使用 varargin。 -
我认为 MATLAB 决定这样做是因为它们的某些函数可以采用大量可选参数。能够在屏幕上显示它们会用那个据说很小的黄色框挡住一半的屏幕。因此,它显示了您需要使用的内容,所有可选的,请转到文档。
标签: matlab