2014-11-17 40 views
4

Dart被设想为务实,直观等。 我想知道为什么顶级main()不会设置exitcode如果int返回?为什么main()返回值不能在dart中设置exitcode?

我知道,您可以通过dart:io.exitCode=或使用dart:io.exit()进行设置。

问题是为什么语言设计师决定放弃这种流行的惯例

#!/path/to/dart --checked 
int main() { 
    int myExitCode = 5; 
    return myExitCode; 
} 

它返回0(如documentation描述),但在命令行天下这只是愚蠢。 它甚至没有警告你(编译器检查模式,dartanalyzer)。脚本只是默默地返回0.它背后有任何理由吗?

UPDATE:

建议BUG:https://code.google.com/p/dart/issues/detail?id=21639

回答

6

我对这个的理解是,虽然main()可以执行完毕,你可能有其他的异步工作正在进行,目前尚未完成。您可以使用dart:io库中的exit立即返回退出代码。

import 'dart:io'; 

main(){ 
    exit(42); 
} 

约出口的API文档更多信息:https://api.dartlang.org/apidocs/channels/stable/dartdoc-viewer/dart:io#id_exit

+0

我知道。我只是希望dart调用'dart:io.exitCode =',如果它是'int',则返回由main返回的值。 –

6

在DART main()方法总是返回void,即使你另行指定。请参阅The main() function如John Evans的回答中所述,如果要返回值,则必须使用exit函数。这是因为Dart虚拟机同时在CLI和浏览器中运行。浏览器从main()提供返回值是没有意义的。因此,该功能仅限于dart:io库,该库仅在dart VM的CLI版本中运行。

+0

我知道什么文件说main()。问题再一次是为什么这样的行为?为什么不至少警告?这是误导。 –

+0

同意。应该有一个警告,或者至少在编辑器中提示主返回类型必须是无效的(如果提供的话)以及main中的返回语句的警告/提示,该语句提供非null的任何内容。我建议在http://dartbug.com提交一个错误: –

0

可能的答案是main()返回的值在浏览器中是没有意义的(正如马特B指出的那样+1),所以飞镖根本就不会这样做。

但这是不连贯的,因为获取命令行参数列表main(List<String> args)在浏览器环境中没有意义,并且dart语言支持main(List<String> args)

另一方面,支持main-return-set-exitCode功能会将飞镖 (如何处理顶级main())的心脏紧张到dart:io,这在浏览器中不可用。 但是,我个人认为它不会像在问题代码中显示的那样出现这种有线和意外的行为那么糟糕。

+0

我为此提出了一个错误。 https://code.google.com/p/dart/issues/detail?id=21639 –

相关问题