为什么main()返回值没有在dart中设置退出代码?

时间:2014-11-17 15:52:59

标签: dart

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

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

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

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

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

更新

提案错误:https://code.google.com/p/dart/issues/detail?id=21639

3 个答案:

答案 0 :(得分:6)

我对此的理解是,虽然main()可能已完成执行,但您可能正在进行尚未完成的其他异步工作。您可以使用exit lib中的dart:io立即返回退出代码。

import 'dart:io';

 main(){
    exit(42);
 }

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

答案 1 :(得分:6)

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

答案 2 :(得分:0)

可能的答案是,main()的返回值在浏览器中没有意义(正如Matt B指出的那样,+1),所以dart根本不会让它出现。

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

另一方面,对main-return-sets-exitCode功能的支持会使dart紧张 (如何处理顶级main())到dart:io这在浏览器中不可用。 但是,我个人认为,如果问题的代码中显示出如此有线和意外的行为,那就不会那么糟糕了。