변경 후 스크립트 실행. 스크립트를 닫았다가 다시 열지 않으면 작동하지 않습니다. -이유는 무엇입니까?나는 JSL을 배우고 시작했을 때 생각하지 못했던 행동을 얻고 있습니다. 이 동작이 예상되는 것인지 또는 실수로 설정 변경으로 인해 발생하는 것인지 알고 싶습니다.
함수와 다른 스크립트를 호출하는 간단한 "기본" 스크립트가 있습니다. JMP를 새로 열고 기본 스크립트 또는 호출하는 다른 함수/스크립트를 새로 실행하면 모두 제대로 실행되고 예상한 결과가 생성됩니다. 그러나 그것들 중 하나를 변경하면 작동하지 않습니다(예: 메인 스크립트에 포함된 스크립트, 예를 들어 아래 마지막 줄에 주석을 다는 경우). 열려 있는 모든 스크립트를 닫은 다음 다시 실행하면 다시 작동합니다. 다른 프로그래밍 언어에서 온 나는 그런 행동을 기대하지 않습니다. 어떤 방향이든 대단히 감사합니다
아래 내 메인 스크립트의 예(저는 JMP13에 있습니다).
getDataTable = getDataTable4partID("partID","partIDname");
include ("plotallcharts.jsl");
include ("generateJournal.jsl");위의 마지막 줄에 주석 처리(또는 clear log()의 주석 처리를 해제한 경우) 즉
//clear log ();
getDataTable = getDataTable4partID("partID","partIDname");
include ("plotallcharts.jsl");
//include ("generateJournal.jsl");위의 스크립트에서 다음 오류가 발생합니다.
Name Unresolved: getDataTable4partID in access or evaluation of 'getDataTable4partID' , getDataTable4partID( "partID", "partIDname" ) /*###*/
열려 있는 모든 스크립트와 기능(때로는 JMP도 포함)을 닫고 다시 시작하면 모든 것이 다시 작동하는 것 같습니다. 무슨 일이 일어나고 있는지 확실하지 않습니다 ....
어떤 방향이든 대단히 감사합니다.
자동화 및 스크립팅Re: 변경 후 스크립트를 실행합니다. 스크립트를 닫았다가 다시 열지 않으면 작동하지 않습니다. -이유는 무엇입니까?예, getDataTable4partID 함수를 호출하려면 먼저 JSL에서 구문 분석해야 합니다.include 문은 함수를 읽고 메모리에 로드합니다.일단 메모리에 있으면 호출할 수 있습니다.
Re: 변경 후 스크립트를 실행합니다. 스크립트를 닫았다가 다시 열지 않으면 작동하지 않습니다. -이유는 무엇입니까?내 무지에 대해 실례합니다. 하지만 이것이 내가 사용해야 하는 이유에 대한 귀하의 설명입니까?
include ("getDataTable4partID.jsl");내 함수 호출이 작동하려면?
Re: 변경 후 스크립트를 실행합니다. 스크립트를 닫았다가 다시 열지 않으면 작동하지 않습니다. -이유는 무엇입니까?함수는 호출되기 전에 구문 분석되어야 합니다.JSL 인터프리터는 코드를 한 번에 한 줄씩 내려갑니다.해당 함수를 호출하기 전에 함수 코드를 단계별로 실행하지 않으면 JSL이 중지됩니다.JSL의 모든 변수 등에 대해서도 마찬가지입니다. 따라서:
Names Default to Here( 1 );
Clear Symbols();
print( a );
a = 42;
실패합니다
Name Unresolved: a in access or evaluation of 'a' , a/*###*/
at line 3 in Script 4.jsl
하는 동안
Names Default to Here( 1 );
Clear Symbols();
a = 42;
print( a );
오류없이 실행됩니다
Re: 변경 후 스크립트를 실행합니다. 스크립트를 닫았다가 다시 열지 않으면 작동하지 않습니다. -이유는 무엇입니까?첨가
include ("getDataTable4partID.jsl");함수 호출 전에 ( getDataTable4partID.jsl은 함수 스크립트의 이름입니다. )
getDataTable = getDataTable4partID("partID","partIDname"); 즉
Names Default to Here( 1 );
Clear Symbols();
include (''getDataTable4partID.jsl");
getDataTable = getDataTable4partID("partID","partIDname");
include ("plotallcharts.jsl");
include ("generateJournal.jsl");모든 문제를 해결한 것 같습니다. 이유가 무엇입니까?
Re: 변경 후 스크립트를 실행합니다. 스크립트를 닫았다가 다시 열지 않으면 작동하지 않습니다. -이유는 무엇입니까?@txnelson
함수 getDataTable4partID가 정의, 저장 및 실행되었습니다. 이전에는 예상대로 작동했습니다.
더 이상 작동하지 않는 것은 이를 호출하는 기본 스크립트 또는 기본 스크립트에 포함된 다른 스크립트입니다.
Re: 변경 후 스크립트를 실행합니다. 스크립트를 닫았다가 다시 열지 않으면 작동하지 않습니다. -이유는 무엇입니까?Names Default to Here( 1 );
Clear Symbols();
getDataTable = getDataTable4partID("partID","partIDname");
include ("plotallcharts.jsl");
include ("generateJournal.jsl");
이것이 코드의 첫 번째 섹션이라고 가정합니다. 옳은?
코드의 세 번째 줄은 "getDataTable4partID"라는 함수를 찾고 있습니다.코드가 해당 줄을 실행하려고 할 때 해당 함수가 정의되지 않았습니다.호출되기 전에 함수 정의를 실행해야 합니다.
Re: 변경 후 스크립트를 실행합니다. 스크립트를 닫았다가 다시 열지 않으면 작동하지 않습니다. -이유는 무엇입니까?감사해요 @txnelson . 이것이 내가 한 일이며 이제 닫고 다시 실행한 후에도 또는 JMP를 다시 시작한 후에도 내 스크립트와 기능이 작동하지 않습니다.
내 메인 스크립트
Names Default to Here( 1 );
Clear Symbols();
getDataTable = getDataTable4partID("partID","partIDname");
include ("plotallcharts.jsl");
include ("generateJournal.jsl");내 기능은 (데이터베이스 세부 정보 없이)입니다.
Names Default to Here (1)
getDataTable4PartID = Function({PartID}, {dtTemp},
dtTemp = Open Database("connectionstring",
"select '" || PartID || "' as value
from dual",
PartID
);
return(dtTemp);
);그리고 내 스크립트
plotallcharts.jsl;
또한 다음과 같은 주먹 라인이 있습니다.
Names Default to Here (1)
여전히 오류가 발생합니다
Name Unresolved: getDataTable4partID in access or evaluation of 'getDataTable4partID' , getDataTable4partID( "partID", "partIDname" ) /*###*/
하지만 메인 스크립트를 실행할 때 로그에 아무 것도 표시되지 않는 경우가 있습니다.
Re: 변경 후 스크립트를 실행합니다. 스크립트를 닫았다가 다시 열지 않으면 작동하지 않습니다. -이유는 무엇입니까?다음을 사용하여 전체 스크립트를 시작해야 합니다.
Names Default to Here( 1 );
Clear Symbols();
이렇게 하면 네임스페이스 환경이 안정화되고 이전 값이 모두 지워지므로 처음부터 코드를 실행할 때마다 새로 시작합니다.
Re: 변경 후 스크립트를 실행합니다. 스크립트를 닫았다가 다시 열지 않으면 작동하지 않습니다. -이유는 무엇입니까?감사해요 @txnelson .
여기에 기능이 있습니다
getDataTable4partID
내가 사용하도록 제안하고 있습니까?
clear symbols();
// clear globals();
내 기본 스크립트 상단에?
그렇다면 행동의 변화 없이 지쳤습니다.
또한 기본 스크립트가 실행되지 않고(변경 후) JMP를 다시 시작하여 스크립트를 예상대로 다시 실행해야 하는 경우 기본 스크립트에서 호출하는 함수도 실행해야 한다는 점을 위에서 언급하는 것을 잊었습니다. , 한 번 없이는 내 기본 스크립트가 실행되지 않습니다. 이것은 분명히 바람직하지 않은 행동이며 일을 제대로 하고 있지 않을까 걱정됩니다.
Re: 변경 후 스크립트를 실행합니다. 스크립트를 닫았다가 다시 열지 않으면 작동하지 않습니다. -이유는 무엇입니까?귀하의 예에서는 함수를 정의하는 위치가 표시되지 않습니다.
getDataTable4partID
JSL은 해석된 언어이며 호출하기 전에 코드에서 참조되는 모든 항목을 생성해야 합니다.모든 코드와 식별 함수 등을 먼저 통과하는 컴파일된 언어가 아닙니다. 이제 혼란스러울 수 있는 것은 일단 함수가 정의되면 메모리에 남아 있으며
clear symbols();<BR />// or<BR />clear globals();
이것을 염두에 두고 코드를 따라가면 JSL이 함수를 찾을 수 없는 이유를 알 수 있습니다.