2014-09-11 2 views
2

[]은 숫자로 채워지지 않은 경우 Matlab에서 무엇을합니까?숫자로 채워지지 않으면 Matlab에서`[]`의 괄호는 무엇입니까?

의 우리가 일부 개체 obj1, obj2ClassAobj3을 가정 해 봅시다. 분명히 그것은에 브라켓을 결합 .. 모르는, 실제로이 호출 뭐죠

objects = [obj1 obj2 obj3]; 

>> class(objects) 

ans = 

ClassA 

>> objects 

objects = 

    1x3 ClassA handle 

    Properties: 
    name 
    ... 
  1. 무엇 가능?
  2. 그런 것을 반복적으로 만드는 방법은 무엇입니까?
    objects = []; objects(end+1) = current_obj;
    objects{end+1} = current_obj; 셀 하나가이 전자로 변환 할 수있는 방법
  3. 를 만들어 작동하지 않습니다. 지. 객체가있는 셀에서? 필드에 다시 [] 표기법을 사용하는 경우

는 (2에서 1로) 당신이 정말로 객체의 빈 배열을해야하는 경우가 없으며 인덱스 "아무것도"어떤 객체를 사용

K>> [objects.name] 

ans = 

Object1Object2Object3 

K>> class([objects.name]) 

ans = 

char 
+0

대괄호는 벡터 또는 행렬을 만듭니다. –

답변

7

[obj1 obj2 obj3]이처럼 클래스 ClassA의 객체의 배열입니다 : 내가 뭘 할 것은 나머지를 반복 한 후 objects에 대해 동일한 구조를 만든 다음 첫 번째 개체와 1 인덱스를 덮어하고있다 [1 2 3]은 숫자 배열입니다. 당신이 a = []; a(2) = 1를 입력하면

, MATLAB은 즉 그것은 숫자의 경우, 제로 기본 요소 a의 지정되지 않은 요소를 채울 것, [0 1]a를 반환합니다. 당신이 objects = []; objects(2) = current_obj를 입력하면

는 MATLAB 유사 클래스 ClassA의 기본 객체로 지정되지 않은 요소를 채우기 위해 요청 된 위치 objects의 2 current_obj을 넣어하려고 시도합니다. 이렇게하려면 ClassA의 생성자를 호출하지만 입력 인자가없는 인 생성자 을 호출해야합니다.

따라서 클래스의 객체로 채우는 이런 종류의 배열을 지원하려면 클래스 생성자를 구현하여 입력 인수가 0 인 상태에서 호출 할 때 오류가 발생하지 않도록해야합니다. 예를 들어, nargin을 간단히 점검하고, 0 인 경우 일부 기본 입력을 제공하고, 그렇지 않으면 제공된 모든 입력을 수락 할 수 있습니다.

그런데 기본적으로 []은 클래스 double입니다. 클래스 ClassA의 빈 배열을 만들려면 objects = ClassA.empty을 사용할 수 있습니다. empty의 모든 메서드가 내장 된 MATLAB 클래스입니다. 실수로 doubleClassA 클래스의 객체로 연결하지 않도록하여 오류를 피할 수 있습니다. 당신이 그들 사이의 요소는 요소들을 연결하는 대괄호가있는 경우

+0

'objects = ClassA.empty'는 좋은 힌트입니다. 셀을 사용 하겠지만'[objects.property]'구문은 객체의 속성 값을 수집하는 데 매우 편리합니다. – embert

0

을 제공합니다 :

x=obj1(2:1) 

결과가 일치하는 유형의 빈 배열입니다. 여기에 x(end+1)을 사용하여 추가 할 수 있습니다. 또는 유사한 코드를 사용하여 추가 할 수 있습니다. x가 존재하지 않으면 일치하는 유형으로 작성됩니다.

if exist('x','var') 
    x(end+1)=obj 
else 
    x(1)=obj 
end 
+1

빈 배열의 객체가 필요하면'ClassName.empty'를 사용하십시오. 'empty'는이 목적을 위해서만 정의 된 모든 MATLAB 클래스의 내장 메소드입니다. –

+0

@SamRoberts : 그런 기능이 없다는 것을 알았습니다. 'empty '를 사용하는 것이 확실히 좋은 해결책입니다. – Daniel

0

구조를 만드는 중입니다.

% Assume we have classA.m file available 
obj1 = classA(); 
obj2 = classA(); 
obj3 = classA(); 

objects = obj1; 
objects(end+1) = obj2; 
objects(end+1) = obj3; 
+0

그들은 구조체가 아니며 배열입니다. –

+0

@SamRoberts, 나는 obj 자체를 언급하고있었습니다. 문제는 불리는 것들이 무엇인가하는 것입니다. 변수'objects'는 구조체의 배열이라는 것을 알고 있습니다. – Kousha

+0

'objects'는 구조체 배열이 아니며, ClassA 클래스의 객체 배열입니다. 질문에 언급 된 구조체 또는 구조체 배열이 없습니다. –

0

대괄호 연결

을위한 것입니다.

요소는 스칼라, 문자열, 벡터, 행렬 등을 abe 할 수 있습니다. 객체의 이름 필드 구조체 문자열을 포함한다고 가정

, 당신과 같이 그들 모두를 연결할 수 있습니다 :

[objects.name] 

는 결과가 될 것입니다 :

[objects(1).name objects(2).name ... objects(end).name] 
관련 문제