Throw() inside include/function<meta http-equiv="Content-Type" content="text/html; charset=UTF-8" />我有一段代码被许多脚本使用,所以我把它转移到一个包含文件中。此代码执行检查并在失败时抛出。但是,我发现它只会终止在 include 中运行的脚本,之后它会选择并开始运行最初调用 include 的代码。这种行为我称之为软杀。我需要包含的 throw() 来杀死“两个”脚本。
软终止在其他语言中很常见,但在函数内部运行,这样你就可以让一段代码无提示地失败。但是,函数内部的 throw() 似乎实际上很难杀死所有正在运行的脚本。
例子:
throwTest.jsl
打印( “A” ) ;
包括( “~路径\throwTest.include.jsl” ) ;
打印( “D” ) ;
投掷测试=功能({} , {默认本地} ,
打印( “E” ) ;
扔() ;
打印( “F” ) ;
) ;
投掷测试() ;
打印( “G” ) ;
throwTest.include.jsl
打印( “乙” ) ;
扔() ;
打印( “C” ) ;
日志输出:
“A” “B” “D” “E”
有谁知道如何从包含的脚本中硬杀死 JSL?
回复:Throw() inside include/function太好了,谢谢克雷奇@JMP !届时我将期待 JMP 13。
回复:Throw() inside include/functionJMP 13(定于 9 月)解决了这个问题;该修复程序将要求您在包含周围添加 try(...)。(try 不会捕获来自 12.2 中包含的抛出)。如果没有尝试,JMP 13 的行为将与 12.2 相同。
联合行动计划 13:
打印(“A”);
尝试(包括(“$desktop\throwTest.include.jsl”),打印(“抓住”)) ;
打印(“D”);
throwTest = Function({}, {默认本地},
打印(“E”);
扔();
打印(“F”);
);
抛出测试();
打印(“G”);
“A” “B” “抓住” “D” “E”
回复:Throw() inside include/function我的看法不同。
如果您只想运行“很多东西”、“许多不同类型的函数”,那么没有什么能阻止您将许多函数放在一个脚本中。您甚至可以在不抛出整个脚本的情况下进行错误检查并停止运行函数。 -- 请参阅下面的 Return() 脚本。
includes 的目的是减少您必须编写完全相同的脚本的次数。
如果我有 100 个不同的脚本,所有脚本都定义 a=1; b=2; c=3; ... 以此类推 zz=702,您不会希望全部输入 100 次。如果没有包含,您很可能会输入一次并复制并粘贴到您的其他脚本中。但是,如果您最终发现错误怎么办?您必须进入 100 个脚本并手动修复代码。一个乏味的工作。但是,如果您最终找到了一种更快的方法来执行定义所有这些变量的相同任务,该怎么办?您必须在所有脚本中重构您的代码 100 次。如果你决定你真的想要 a=2; 怎么办? b = 3 ...等。您必须更改代码 100 次。更改 100 个脚本是一项容易出错的任务,如果您错过了一个脚本、进行了错误的更改等怎么办?
includes 的目的不是创建一个可以杀死奴隶并拯救主人的奴隶/主人关系。我们有这方面的功能。includes的目的是为了节省编码时间。
(注意:include 的另一个目的是帮助保持脚本语言独立,从而易于调试并保持代码整洁。包含在使用 HTML/CSS/JavaScript 的 Web 应用程序中特别有用,但这并不真正适用于 JSL。)
传递检查变量有一些问题,不是很多,而是一些。如果另一个脚本使用相同的检查变量怎么办?如果我决定更改检查变量怎么办?如果我输入错误的检查变量怎么办? 在每种情况下,我都必须去找到我包含 throwTest.include 的每个脚本并编辑检查变量以使其正确,这首先违背了使用 include 的目的。
回复:Throw() inside include/function更新,不知道为什么我昨晚没有想到这一点,但提前发送 return() 语句将有效地抛出一个函数。这在其他语言中也很常见。
投掷测试=功能({} , {默认本地} ,
打印( “E” ) ;
返回() ;
打印( “F” ) ;
) ;
投掷测试() ;
打印( “G” ) ;
输出:
“E” “G”
回复:Throw() inside include/function我不同意您关于上述方法“违背了使用包含的目的”的说法。
包含的代码可以执行很多很多不同类型的功能,并且可以做很多事情,比如数据清理、转换等。如果在包含的代码中发现了一个无效的用例,人们可能想要关闭整个应用程序。因此,需要抛出包含的代码,然后当执行返回到主代码时,需要检测是否已检测到失败情况,然后需要抛出主脚本。
回复:Throw() inside include/function虽然这是一个简单的解决方法,但它确实违背了使用包含的目的。
回复:Throw() inside include/function我相信您可以通过检查变量简单地传递信息并在主脚本中采取行动来解决这个问题。
名字默认到这里( 1个) ;
包括( “C:\Users\txjim\Documents\JMP\throwTest.include.jsl” ) ;
如果( 丢它== 1个,扔() ) ;
打印( “D” ) ;
投掷测试=功能( {} ,
{默认本地} ,
打印( “E” ) ;
扔() ;
打印( “F” ) ;
) ;
抛出测试() ;
打印( “G” ) ;
// 这里是包含文件
打印( “乙” ) ;
丢它= 1个;
扔() ;
打印( “C” ) ;