2013-06-14 2 views
3

객체 배열을 만들었으므로 for 루프를 사용하지 않고 벡터 연산에 속성 값을 지정하고 싶습니다. 불행히도 나는 오류가 발생합니다.matlab에 객체 배열에 대한 객체 속성 값을 설정합니다.

간단한 문제의 예.

classdef clsMyClass < handle 
    properties 
     dblMyProperty1 
    end 
    methods 
     function obj = clsMyClass() 
     end  
    end 
end 

그리고 우리는 다음과 같은 오류 얻을

vecMyArray = clsMyClass.empty(100,0); 
vecMyArray(100) = clsMyClass;  
vecMyArray.dblMyProperty1 = 1:100;  

실행 :

을 ??? 잘못된 도트 이름 의 오른쪽 요소 수입니다. 왼쪽 주변에 []이 누락 된 것은 가능한 원인입니다.

어떤 도움을 주시면 감사하겠습니다.

+0

내 두 센트 :'for' 루프가 아마도 가장 빠른 솔루션 일 것입니다. 또한 첫 번째 코드 줄 ('.empty (...)')은 아무 것도하지 않으며 그 효과는 즉시 두 번째 코드 줄로 대체됩니다. – Bee

+0

MATLAB의 벡터화 덕분에이 작업이 "잘못"되었습니다. 클래스를 "inside-out"으로 바꾸는 것을 고려하십시오. 객체의 배열을 가지지 않고 속성이 배열 인 단일 객체를 가지십시오. [이 논문의 MATLAB 및 OOP] (http://stackoverflow.com/a/1745686/238644)를 참조하십시오. –

+0

@DangKhoa, 나는 큰 배열을 여러 개 보유하는 20 개의 개체 만 가질 계획입니다. 한 번에 20 개 개체의 메서드를 호출하고 속성을 변경하고 싶습니다. – Ruut

답변

1

나는 지금 무엇을 하려는지보고 있습니다.

>> [vecMyArray.dblMyProperty1] = disperse(1:100); 
>> vecMyArray(1).dblMyProperty1 
ans = 
    1 
>> vecMyArray(10).dblMyProperty1 
ans = 
    10 
+0

이것이 내 문제를 해결할 것이라고 생각합니다. 불행히도 나는 MATLAB 버전 7.9.1.705 (R2009b) SP1을 사용하고 있으며 오류 메시지는'??? 정의되지 않은 함수 또는 메서드 'disperse' 'double'형식입니다 .' 따라서 귀하의 솔루션을 확인할 수 없습니다 – Ruut

+0

이것은 내장 함수가 아니라 MATLAB 파일 교환에 있습니다. 링크를 클릭하여 다운로드하십시오. –

0

"구조 배열 오류"에서 대답 here을 찾을 것이라고 생각합니다. 이 클래스이지만 유사한 규칙이 적용됩니다.

Unfortunately missing [] is not the cause, since adding them causes more errors. The cause is that you cannot assign the same value to all fields of the same name at once, you must do it one at a time, as in the following code:

그래서 당신이 필요합니다 :

for ii=1:100 
    vecMyArray(ii).dblMyProperty1 = ii; 
end 

나는 만족하지 알고,하지만 난 적어도 우리가 결정적으로이 오류를 이해하는 데 도움 생각합니다.