예제 의 클래스와 비슷한 클래스 를 만들면서 클래스 인스턴스에 인수를 첨부했습니다.
function t = train (m, F_z, F_b, varargin)
...
t.m = m; % total mass of train [kg]
t.F_z = F_z; % ...
...
t = class (t, "train");
필드 이름 작동하기
>> t1 = train(100, 150000, 200000);
...
>> fieldnames(t1)
ans =
{
[1,1] = m
[2,1] = F_z
...
하지만 이것에 어떻게 액세스합니까? 분명히 그렇지 않습니다
>> t1.m
error: invalid index for class
>> getfield(t1, 'm')
error: invalid index for class
error: called from
...
내가 줄을두면 t = class (t, 'train');
말 function t = train (m...
에 @train/train.m
이 일 모두 잘 작동하는 것 ... 그러나 그것 struct
아닌class
두 가지 방법으로이를 수행 할 수 있습니다. 검색 방법을 정의하거나 (쉬운) 설정 subsref
(구독 참조) (어려움) 할 수 있습니다.
메소드를 정의하려면 다음을 사용하여 작성하십시오 @train/m.m
.
function r = m ()
r = t.m;
endfunction
구독을 설정하려면 다음을 사용 @train/subsref.m
하여 만듭니다 .
function r = subsref (val, idx)
if (strcmp (idx.type, ".") && strcmp (idx.subs, "m"))
r = val.m;
endif
endfunction
이렇게하면 필드 에만 액세스 할 수 있습니다 m
. 클래스 내의 속성에 대한 액세스 권한을 부여하려면 다음을 수행하면됩니다.
function r = subsref (val, idx)
r = subsref (struct (val), idx);
endfunction
속성 하위 집합에 대한 액세스를 허용하려면 다음을 수행 할 수 있습니다.
function r = subsref (val, idx)
if (strcmp (idx.type, ".") && any (strcmp (idx.subs, {"m", "f2", "F_z"})))
r = val.(idx.subs{1});
endif
endfunction
그러나 subsref
구조로 액세스 할 때뿐만 아니라 모든 인덱싱을 제어합니다. 사람들이 객체를 색인화하도록 허용 할 수 있습니다 (마차 클래스가 있고 기차를 색인화하면 객체가 반환 될 수 있습니다). 이 함수는 처음에는 약간 이상해 보이지만 subsasgn
((첨자 할당) 처럼 ) 매우 유용 할 수 있습니다. 다음과 같이 할 수 있습니다.
function r = subsref (val, idx)
if (strcmp (idx.type, ".") && strcmp (idx.subs, "m"))
r = val.m;
elseif (strcmp (idx.type, "()"))
r = val.wagons(idx.subs{:});
endif
endfunction
이 기사는 인터넷에서 수집됩니다. 재 인쇄 할 때 출처를 알려주십시오.
침해가 발생한 경우 연락 주시기 바랍니다[email protected] 삭제
몇 마디 만하겠습니다