포함/함수 내부의 Throw()<meta http-equiv="Content-Type" content="text/html; charset=UTF-8" />많은 스크립트에서 사용하는 코드가 있어서 인클루드 파일로 옮겼습니다.이 코드는 검사를 수행하고 실패하면 throw합니다.그러나 포함 내부에서 실행 중인 스크립트만 종료한 다음 원래 포함을 호출한 코드를 선택하고 실행하기 시작한다는 사실을 발견했습니다.이런 종류의 행동을 저는 소프트 킬이라고 부를 것입니다."둘 다" 스크립트를 죽이기 위해 포함된 throw()가 필요합니다.
소프트 킬은 다른 언어에서는 일반적이지만 함수 내에서 실행되므로 코드 조각이 조용히 실패할 수 있습니다.그러나 함수 내부의 throw()는 실제로 실행 중인 모든 스크립트를 강제 종료하는 것 같습니다.
예:
throwTest.jsl
인쇄 ( "ㅏ" ) ;
포함하다 ( "~경로\throwTest.include.jsl" ) ;
인쇄 ( "디" ) ;
throwTest = 기능 ({} , { 기본 로컬 } ,
인쇄 ( "이자형" ) ;
던지다 () ;
인쇄 ( "에프" ) ;
) ;
throwTest () ;
인쇄 ( "G" ) ;
throwTest.include.jsl
인쇄 ( "비" ) ;
던지다 () ;
인쇄 ( "씨" ) ;
로그 출력:
"A" "B" "D" "E"
포함된 스크립트 내부에서 JSL을 하드 킬하는 방법을 아는 사람이 있습니까?
Re: include/function 안에 Throw()굉장한 감사 크레이지@JMP !그럼 JMP 13을 기대하겠습니다.
Re: include/function 안에 Throw()JMP 13(9월 예정)에서는 이 문제를 다룹니다. 이 문제를 수정하려면 include 주변에 try(...)를 추가해야 합니다.(try는 12.2의 포함에서 던지기를 잡지 않습니다).시도가 없으면 JMP 13은 12.2와 동일하게 작동합니다.
JMP 13:
Print("A");
노력하다( Include("$desktop\throwTest.include.jsl"), 인쇄("잡기")) ;
인쇄("D");
throwTest = 함수({}, {기본 로컬},
Print("E");
던지다();
Print("에프");
);
throwTest();
Print("G");
"A" "B" "캐치" "D" "E"
Re: include/function 안에 Throw()나는 사물을 다르게 본다.
원하는 것이 "많은 것", "다양한 유형의 함수"를 실행하는 것뿐이라면 하나의 스크립트에 많은 함수를 넣는 것을 막을 수 있는 것은 없습니다.전체 스크립트를 실행하지 않고도 오류 검사를 수행하고 함수 실행을 중지할 수도 있습니다. --아래 내 Return() 스크립트를 참조하십시오.
include의 목적은 정확히 동일한 스크립트를 코딩해야 하는 시간을 줄이는 것입니다.
100개의 서로 다른 스크립트가 있는 경우 모두 a=1을 정의합니다. b=2; c=3; ... zz=702까지 이 모든 것을 100번 입력하고 싶지는 않을 것입니다.포함하지 않으면 한 번 입력하고 복사하여 다른 스크립트에 붙여넣을 것입니다.하지만 나중에 버그를 발견하면 어떻게 될까요?100개의 스크립트로 이동하여 수동으로 코드를 수정해야 합니다.지루한 일.하지만 이러한 모든 변수를 정의하는 동일한 작업을 수행하는 더 빠른 방법을 찾으면 어떻게 될까요?모든 스크립트에서 코드를 100번 리팩토링해야 합니다.실제로 a=2를 원한다고 결정하면 어떻게 됩니까? b=3... 등.코드를 100번 변경해야 합니다.100개의 스크립트를 변경하는 것은 오류가 발생하기 쉬운 작업입니다. 스크립트를 놓치거나 잘못 변경하면 어떻게 됩니까?
include의 목적은 슬레이브를 죽이고 마스터를 구할 수 있는 슬레이브/마스터 관계를 만드는 것이 아닙니다.우리는 그것을 위한 기능을 가지고 있습니다.포함의 목적은 코딩 시간을 절약하는 것입니다.
(참고: include의 또 다른 목적은 스크립팅 언어를 분리하여 디버그하기 쉽고 코드를 깨끗하게 유지하는 것입니다.포함은 HTML/CSS/JavaScript를 사용하는 웹 애플리케이션에서 특히 유용하지만 JSL에는 실제로 적용되지 않습니다.)
검사 변수를 전달하는 데는 몇 가지 문제가 있습니다.다른 스크립트가 동일한 검사 변수를 사용하면 어떻게 됩니까?검사 변수를 변경하기로 결정하면 어떻게 됩니까?검사 변수를 잘못 입력하면 어떻게 됩니까? 각각의 경우에 나는 throwTest.include를 포함한 모든 스크립트를 찾아 검사 변수가 올바르도록 편집해야 합니다. 그러면 처음에 include를 사용하는 목적이 무산됩니다.
Re: include/function 안에 Throw()업데이트, 어젯밤에 왜 이것을 생각하지 않았는지 모르겠지만 return() 문을 일찍 보내면 효과적으로 함수가 발생합니다.이것은 다른 언어에서도 일반적입니다.
throwTest = 기능 ({} , { 기본 로컬 } ,
인쇄 ( "이자형" ) ;
반품 () ;
인쇄 ( "에프" ) ;
) ;
throwTest () ;
인쇄 ( "G" ) ;
산출:
"이" "지"
Re: include/function 안에 Throw()위의 방법이 "포함을 사용하는 목적을 무산시킨다"는 귀하의 진술에 동의하지 않습니다.
포함된 코드는 매우 다양한 유형의 기능을 수행하고 데이터 정리, 변환 등과 같은 많은 작업을 수행할 수 있습니다. 포함된 코드 내에서 잘못된 사용 사례가 발견되면 전체 애플리케이션을 종료해야 할 수 있습니다.따라서 포함된 코드를 Throw 하여 메인 코드로 실행이 넘어가면 실패 상황이 감지된 것을 감지한 후 메인 스크립트를 Throw 해야 합니다.
Re: include/function 안에 Throw()이것은 간단한 해결 방법이지만 실제로 포함을 사용하는 목적을 무효화합니다.
Re: include/function 안에 Throw()확인 변수를 통해 정보를 전달하고 기본 스크립트에서 조치를 취함으로써 이 문제를 해결할 수 있다고 생각합니다.
여기에 기본 이름 ( 1 ) ;
포함하다 ( "C:\사용자\txjim\문서\JMP\throwTest.include.jsl" ) ;
만약에 ( 던지기 == 1 , 던지다 () ) ;
인쇄 ( "디" ) ;
throwTest = 기능 ( {} ,
{기본 로컬} ,
인쇄 ( "이자형" ) ;
던지다 () ;
인쇄 ( "에프" ) ;
) ;
던지기테스트() ;
인쇄 ( "G" ) ;
// 다음은 포함 파일입니다.
인쇄 ( "비" ) ;
던지다 = 1 ;
던지다 () ;
인쇄 ( "씨" ) ;