我有一个Matlab function
,它有许多名称 - 值参数输入。对于某些参数名称,用户可以选择许多可能的值(并不总是很明显)。我想做的是, IF 用户调用名称,但没有给出值,那么 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)
函数。
非常感谢任何帮助或建议!干杯
答案 0 :(得分: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)相比)。