Mixing name/value pair syntax

105 ビュー (過去 30 日間)
Matt J
Matt J 2026 年 1 月 7 日 5:56
編集済み: Matt J 2026 年 1 月 9 日 17:43
In a Matlab seminar a few years ago, I asked why function calls that mix old style and new style name/value pair syntax would only work in a certain order. Specifically, the old style pairs must come first in the argument list. When the order is reversed, an error is thrown as illustrated below.
testFunc('A',10, B=20)
A: 10 B: 20
testFunc(B=20, 'A',10)
Unsupported use of the '=' operator. To compare values for equality, use '=='. To pass name-value arguments using the name=value format, provide these arguments after all other inputs.
A MathWorker at the seminar told me that this was by design, but there was no time for him to elaborate. Can anyone think why this would have been a deliberate design choice?
function testFunc(opts)
arguments
opts.A=1;
opts.B=2;
end
disp(opts)
end
  12 件のコメント
Rik
Rik 2026 年 1 月 9 日 17:07
Isn't there a single parser that looks for syntax errors? Why would the naive approach of making the Name=Value syntax work the same as {:} cause any issues anywhere? And why there be a requirement for Name=Value to be last either way?
Only partially on topic: I think the monstrosity below shows how poorly I understand what is happening.
tryme(A=10)
A = "A"
B = 10
function tryme(A,B)
arguments
A=1;
B=2;
end
A
B
end
Matt J
Matt J 2026 年 1 月 9 日 17:38
編集済み: Matt J 2026 年 1 月 9 日 17:43
I think the monstrosity below shows how poorly I understand what is happening.
Nothing monstrous there. As you noted earlier, the A=10 syntax gets converted to a comma-separated pair {"A",10} and so the call is equivalent to,
args={"A",10};
tryme(args{:})
I might have expected,
args = {'A',10}
so that's a little strange.

サインインしてコメントする。

回答 (0 件)

カテゴリ

Help Center および File ExchangeString Parsing についてさらに検索

製品

Community Treasure Hunt

Find the treasures in MATLAB Central and discover how the community can help you!

Start Hunting!

Translated by