2011-09-22 2 views
0

다음은 obj.yo가 for 루프의 인덱스로 사용되기 때문에 Matlab에서 작동하지 않는 예제입니다. 루프를 상응하는 while 루프로 변환하면 정상적으로 작동하므로 Matlab은이 코드를 실행할 수 없습니다.for 루프에서 인덱스로 객체 속성을 사용할 수없는 이유는 무엇입니까? (MATLAB)

classdef iter_test 
    properties 
     yo = 1; 
    end 
    methods 
     function obj = iter_test 
     end 
     function run(obj) 
      for obj.yo = 1:10 
       disp('yo'); 
      end 
     end 
    end 
end 

답변

2

머리말 : Matlab의 oop 기능을 너무 많이 사용하면 안됩니다. 실제 프로그래밍 언어에 비해 matlab> 2008a로 개선 된 점이 있지만 Matlab의 oop 지원은 매우 열악합니다.Mathworks는 저의 경험으로 최대한 실수를하지 않도록 사용자를 보호하려고 노력하고 있습니다. 이것은 때로는 그들이 가능성을 제한하고 있음을 의미합니다. 예를 보면 나는 정확히 같은 일이 일어나고 있다고 생각합니다.

Answer Answer : Matlab에는 명시 적 입력이 없으므로 (변수/매개 변수가 즉시 입력 됨) 코드에 문제가 발생할 수 있습니다.상상 :

$ a = iter_test() 
% a.yo is set to 1 

% let's overwrite 'yo' 
$ a.yo = struct('somefield', [], 'second_field', []); 
% a.yo is now a struct 

다음 코드 때문에 실패합니다

$ for a.yo 
    disp('hey'); 
    end 

내가 MATLAB 매개 변수/변수의 입력을 지원한다면, 코드가 잘 작동합니다 내기. 그러나 초기화 후에 매개 변수/변수에 완전히 다른 데이터 유형을 할당 할 수 있기 때문에 컴파일러는 문제가 발생할 수 있기 때문에 수행하려는 작업을 허용하지 않습니다.

0

오류가

??? Error: File: iter_test.m Line: 9 Column: 20 
Unexpected MATLAB operator. 

는 MATLAB 파서 그것을 이해하지 않는다는 것을 의미합니다. 버그인지 고의인지를 결정하기 위해 남겨 두겠습니다. 그것을 TMW 기술 지원과 함께 제기하십시오.

편집 :이 또한 첨자의 모든 다른 종류의 발생

a = [0 1]; 
for a(1) = 1:10, end 

a = {0 1}; 
for a{1} = 1:10, end 

a = struct('a', 0, 'b', 0); 
for a.a = 1:10, end 

는 그것은 MATLAB 파서에 문제가있다 :

모든 다음은 구문 분석 실패합니다. 그것을 Mathworks와 함께하십시오.

+0

그래, 나는 파서가 그것을 이해하지 못한다는 것을 모았습니다 ... 그 질문은 왜입니다. 이것은 내 질문에 대한 대답이 아닙니다. – zergylord

+0

나는 동의하지 않는다. "왜 내가 할 수 없니?" "MATLAB은 현재이를 지원하지 않습니다." 질문은 정말로 "왜 MATLAB이 이것을 지원하지 않습니까?" – Nzbuu

+0

아, 도움이되지 않는 답변보다는 마음에 들지 않는 답변을 다운 voting하는 것을 멈출 수 있습니까? – Nzbuu

2

도움으로부터

"속성은 구조체 개체의 필드와 같습니다."

따라서 읽기/쓰기 속성을 사용할 수 있습니다. 그러나 당신이하려는 것처럼 변수로 사용하지 마십시오. 당신이 다음

for obj.yo = 1:10 
       disp('yo'); 
    end 

을 쓸 때 obj.yo는 변수로 사용되고 아닌 필드 이름.

EDU>> s.id=4 
s = 
    id: 4 

위의 오류를 비교

EDU>> s = struct('id',10) 
for s.id=1:10 
    disp('hi') 
end 

s = 

    id: 10 

??? for s.id=1:10 
     | 
Error: Unexpected MATLAB operator. 

그러나, 하나는 새 값으로 구조체 필드를 '설정'수 당신이있어 무엇을 :

은 좀 더 명확하게하기 위해 실제 구조체 사용량 비교 :

??? Error using ==> iter_test 
Error: File: iter_test.m Line: 9 Column: 20 
Unexpected MATLAB operator. 

따라서, 나는하지 생각 할 무엇 하려고하는 것은 가능합니다.

관련 문제