아래 코드는 작동하지 않습니다. b/c JSL은 함수 내에서 런타임에 평가하는 대신 함수에 전달하려고 할 때 emptyVar를 평가합니다.
isEmptyTest = Function({var},
return(isempty(var));
);
isEmptyTest(emptyVar);
이게 바뀌면 정말 좋을 것 같아요.
네, Case 1에 사용하려고 했어요. 저는 사용자 구성 파일을 활용하는 도구를 만들고 있었습니다. 변수는 사용자 정의 파일에서 로드되므로 변수가 존재할 수도 있고 존재하지 않을 수도 있으며 true/false로 설정되거나 설정되지 않을 수도 있습니다. 나는 진실에 도달하면 종료되므로 "or" 문을 수행할 수 있다는 것을 깨달을 때까지 이것을 테스트할 래퍼 함수를 구축하기를 바랐습니다.
if(isempty(var) | !var,
//run code)
);
변수가 아직 선언되지 않은 경우에는 오류가 발생하지 않으며 Truthy 신호를 보내고 다른 종속성을 확인하지 않고 if 문에서 코드를 실행합니다. 변수가 정의되면 그것이 사실인지 아닌지 확인할 수 있습니다.
기호 테이블은 지금까지 존재했던 모든 변수를 추적합니다. 세트 값으로. 변수가 설정되지 않은 경우 초기화되지 않은 것이므로 사용하면 오류가 발생할 수 있습니다.
내장 비었다() 함수는 여러 가지 특이한 상황에서 특별한 경우를 만듭니다.
사례 1 : 이전에 사용된 적이 없는 변수
Is Empty(neverSeenBefore) = 1;
print(neverSeenBefore)
/*:
Name Unresolved: neverSeenBefore in access or evaluation of 'neverSeenBefore' , neverSeenBefore/*###*/
이름이 확인되지 않음 JMP가 기호 테이블을 살펴봤지만 이름을 찾을 수 없다는 뜻입니다.
사례 2 (일반적인 경우): 내장 함수가 반환한 값으로 설정된 변수 비어 있는() 함수 또는 empty()를 반환한 다른 함수
ev=empty(); show(isempty(ev),ev);
/*:
Is Empty(ev) = 1;
ev = Empty();
비어 있는지 테스트하려면 다음을 사용해야 합니다. 비어 있는() 변수를 초기화하는 함수입니다.
사례 3 : 내장에 의해 지워진 변수 전역 변수 지우기() 기능
ev2=42; clear globals(ev2); show(isempty(ev2),ev2);
Is Empty(ev2) = 1;
ev2 = ev2;
사용 전역 변수 지우기() 프로덕션 코드에서는 좋은 생각이 아니지만 코드를 개발하는 동안 도움이 될 수 있습니다. 기호 테이블에서 기호를 제거하지는 않지만 해당 값을 제거하고 값에 대해 공백()을 남기지도 않습니다. 사용 방법에 따라 비어 있거나 누락된 것처럼 작동할 수 있습니다.
JSL은 값별로 사용자가 작성한 함수에 인수를 전달하여 사용할 함수에 대한 복사본을 만듭니다. JMP의 향후 버전에서는 참조로 인수를 전달할 수 있습니다. 해당 시점에서 초기화되지 않은 변수를 참조로 전달하면 어떤 일이 발생하는지 살펴보겠습니다.