How can I use dynamic field names instead of setfield inside a function call?

조회 수: 6 (최근 30일)
Irl Smith
Irl Smith 2019년 10월 17일
댓글: Irl Smith 2019년 10월 17일
In the following call, I have an existing structure Syst0. I want to call a function with as an argument Syst0 with a field set to a value:
HwErr1 = TracePeriodicSys(setfield(Syst0,'AngleError',Err1));
This line generates a yellow caution triangle with the note "Use dynamic fieldnames with structures instead of SETFIELD". How do I do this without creating a temporary structure (e.g.,
SystTemp=Syst0;SystTemp.AngleError=Err1;HwErr1 = TracePeriodicSys(SystTemp);
I think maybe this caution is erroneous.
  댓글 수: 4
Walter Roberson
Walter Roberson 2019년 10월 17일
The side effect is in the temporary variable that MATLAB creates.
Your code is equivalent to
HwErr1 = TracePeriodicSys(subsasgn(Syst0, struct('type', '.', 'subs' {'AngleError'}), Err1));
This does not modify Syst0: it creates a temporary variable to do the assignment into, and passes the result as output.
Irl Smith
Irl Smith 2019년 10월 17일
Thank you much for that explanation. It sounds like using setfield in the way I did doesn't necessarily save time or memory, but at least the code is a little easier (for me, anyway) to read.

댓글을 달려면 로그인하십시오.

답변 (0개)

Community Treasure Hunt

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

Start Hunting!

Translated by