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 オブジェクトを作成する必要があると考えているか、問題がより複雑で、説明が印象を与えているかのどちらかです。

それ以外の場合は、ここでより簡単な方法の設計を提供します. これを行う 1 つの方法は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 に答える