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 CenterFile Exchange 中查找有关 String Parsing 的更多信息

产品

Community Treasure Hunt

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

Start Hunting!

Translated by