2014-02-13 4 views
0

함수 내부에서 구조체의 기본 작업 영역에있는 필드를 수정하려고합니다. 따라서 assignin 함수를 사용하려고합니다.구조체의 필드 대신 다른 구조체

assignin('base', 'arg', setfield('arg.aa','abc', 60)) 

내 구조는 다음과 같다 : 따라서

arg = struct('aa', struct('abc',30)); 

, 나는 필드 abc을 modifiy 것을 시도하고있다. 그러나 assignin 명령 줄은 aa 구조를 덮어 쓰고 abc을 넣습니다.

따라서 assignin 이후에 aa이 없어지고 arg.abc = 60으로 남았습니다.

답변

0
assignin('base', 'arg', setfield('arg.aa','abc', 60)) 

이것은 원하는대로 수행하지 않습니다. 이 호출은 먼저 로컬/함수 작업 영역에서 setfield('arg.aa','abc', 60)을 평가 한 다음 결과를 기본 작업 영역에 할당합니다. 값이 60abc 단일 필드가있는 구조체는 첫 번째 setfield 인수가 문자열이기 때문에 결과가됩니다. (즉 BTW 경고를 제기해야합니다.)

당신은 이것을 대체 할 수있는 : 같은 일을하면서

evalin('base', 'arg.aa = setfield(arg.aa, ''abc'', 60);') 

또는 쉽게 읽고 :

evalin('base', 'arg.aa.abc = 60;') 
+0

그것은 마법처럼 작동합니다! –

관련 문제