Matlab R2012b에서 의문 난 오류가 발생했습니다. 데이터 유형 인 변수 이름이 이상한 동작을 보이는 것 같습니다. 이 작은 예제를 참조하십시오 : 예상대로함수에서 스크립트 실행 중 퍼즐 오류가 발생했습니다.
이function [] = test1()
dataset = 1;
if dataset ~= 0
disp hello
end
end
test1()
의 호출은, 출력 hello
생산하고 있습니다. 이제 내 함수에 dataset
값을 설정하는 대신 스크립트를 실행합니다. - 나는 그것이 알고
Undefined function 'ne' for input arguments of type 'dataset'.
Error in test2 (line 4)
if dataset ~= 0
가 (변수가 dataset
라는 이름의 용서 : 나는 test2()
를 호출 할 때이 오류가 지금
dataset=1;
: myscript.m
function [] = test2()
myscript;
if dataset ~= 0
disp hello
end
end
한 라인을 가지고 또한 데이터 유형의 이름, 그리고 그것은 내가 실행 중이던 코드에 들어 왔습니다.) 따라서 test2
에있는 것처럼 보이면 Matlab은 빈을 생성합니다 변수가 dataset
인 대신개체를 사용하십시오. 또한이 동작은 함수 본문 대신 스크립트에서 값을 설정할 때만 나타납니다. 더욱 이상한 것은 할 수 있다는 것입니다.
>> dbstop in test2 at 4 % line of if statement
>> test2()
K>> dataset
dataset =
1.00
K>> dataset ~= 0
ans =
1
K>> if dataset ~= 0, disp hello; end
hello
K>> dbcont
나는 같은 오류가 발생합니다! 디버깅 모드에서는 오류가 표시되지 않지만 정상적으로 실행됩니다.
누구든지 이것을 재현 할 수 있습니까? 여기서 무슨 일이 일어나고있는거야?
요약하면 문제는'dataset'은 함수이고 입력 매개 변수없이 실행하면 데이터 셋 객체가 생성된다는 것입니다. 함수 내에서 값을 할당하면 MATLAB은이를 기억합니다. 별도의 스크립트에서이를 수행하면 MATLAB은 먼저 함수를 실행합니다. – MeMyselfAndI
Matlab은 함수에서 할당되었지만 별도의 스크립트에서 할당 된 것을 기억하는 이유는 무엇입니까? 스크립트를 실행하는 것이 코드의 복사 붙여 넣기와 같다고 생각했습니다. 또한 왜 정수 값은 디버깅 모드에서 나타나지만 정상 실행에서는 나타나지 않을까요? –
나는 이제 모든 세부 사항을 말하지 않아도되지만 이것은 MATLAB의 파싱 순서와 관련이있다. – MeMyselfAndI