どのような状況でリテラル:
を Matlab 関数に渡すことができますか? 実験の結果、リテラル:
が string として渡されることもあれば':'
、エラーが発生することもあることがわかりました。例えば:
>> type writeargs
function writeargs(varargin)
disp(varargin);
end
>> writeargs(:)
Undefined variable writeargs.
>> writeargs(:, 1)
Undefined variable writeargs.
>> writeargs(:, 1, :)
':' [1] ':'
>> writeargs(:, :, :)
':' ':' ':'
>> writeargs(1, 2, :, 4, 5)
[1] [2] ':' [4] [5]
>> writeargs(1, 2, :, end)
Error using writeargs
Too many output arguments.
この構文は、少なくとも 3 つの引数が渡された場合に許可されるという印象を受けました。それは恣意的に見えます。ここでの法的な構文は何ですか?
編集:ユースケースを求められたコメント。ユースケースは、引数がスライスまたはインデックスとして使用される場合に発生する可能性があります。Python コードでは、スライス オブジェクトをメソッドに渡すケースがありました。1 つの使用例は、この回答に触発されたような関数の場合です。ここでは、Matlabs が解釈できないことを回避するために小さな関数が使用されmagic(5)(3, :)
、ヘルパー関数を作成して で呼び出すことができますparen(magic(5), 3, :)
。