【问题标题】:Matlab Function - ask for user input for given argumentMatlab 函数 - 要求用户输入给定参数
【发布时间】:2014-10-18 03:59:32
【问题描述】:

我有一个 Matlab function,它有许多名称-值参数输入。对于某些参数名称,用户可以从中选择很多可能的值(并不总是很明显)。我想做的是,IF 用户调用该名称,但没有给出值,THEN Matlab 将显示可能的条目 AND THEN 接受用户的输入。

例如我有一个函数,例如:

function getSomeData( varargin )

p=inputParser;
defaultData='abc';

addParameter(p, 'Data', defaultData);

parse(p,varargin{:});

end

如果用户要在命令窗口中调用函数,例如:

>> getSomeData('Data')

如果用户没有给出'Data'的值,窗口会显示并提示

>> getSomeData('Data')
No value for 'Data' Given
Possible Values of 'Data' are:
'abc'
'def'
'other'

Please input your 'Data':

我可以在其中使用result=input(prompt) 函数。

非常感谢任何帮助或建议!干杯

【问题讨论】:

  • 我很难遵循您的代码。所以你说你已经有一个可以接受名称-值对的函数了?这些名称-值是如何获得的?您的getSomeData 函数似乎只是设置了一些默认数据,然后通过一个名为parse 的函数。 parse 是做什么的?您能向我们展示您的所有代码吗?

标签: matlab function input name-value basicnamevaluepair


【解决方案1】:

我可以请您指定输入内容的复杂性。要么你来自 java 并且认为你需要创建一个 I/O 对象才能读取输入,要么你的问题比描述给人的印象更复杂。

否则,我会在这里为您提供一种不太复杂的前进方式的设计。一种方法是使用nargin 属性,它可以找到函数的输入数量。与 nargin 一起使用 if 语句(或 switch-case?)。

if nargin==0
    % print alternative inputs with disp or fprintf.
    % This alternative can also be replaced with comments (single block with
    % no empty rows) right below the function. This will then be seen with
    % the `help funName` command

elseif nargin==1
    % Print description + permitted values. This can be done from a
    % switch-case statement (if you want the switch-case statement
    % can be placed in an external function).

elseif ~mod(nargin,2)
    %parse input pairs and do the calculations.

else
    error('wrong number of input arguments');
    % or
    % fprintf('wrong number of input arguments\n');
    % set outputs to '', {}, [], ...
    % return;
end

我希望这会有所帮助,即使它不完全是您提出的解决方案。然而,这是一个简单的解决方案,其优点是您不会混淆信息部分和执行部分。我的猜测是,这是一种无需实现复杂解析器即可使用 I/O 的便捷方式。

这些问题通常可以通过具有许多不同命令的复杂解析器来解决(与 cmd 提示符(windows)的终端(基于 unix)相比)。

【讨论】:

    猜你喜欢
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2011-10-18
    • 1970-01-01
    • 1970-01-01
    相关资源
    最近更新 更多