0

我有一个function具有大量名称-值参数输入的 Matlab。对于某些参数名称,用户可以从中选择很多可能的值(并不总是很明显)。我想做的是,如果用户调用名称,但没有给出值,那么Matlab 将显示可能的条目,然后接受用户的输入。

例如,我有一个功能,例如:

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)功能。

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

4

1 回答 1

0

我可以请您指定输入内容的复杂性。要么你来自 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)相比)。

于 2014-10-18T09:02:23.397 回答