为什么main()返回值没有在dart中设置exitcode?

Mic*_*jer 4 dart

Dart假设是实用的,直观的等等.我想知道为什么如果返回int,顶级main()不会设置exitcode?

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

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

#!/path/to/dart --checked
int main() {
  int myExitCode = 5;
  return myExitCode;
}
Run Code Online (Sandbox Code Playgroud)

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

更新:

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

Joh*_*ans 6

我对此的理解是,虽然main()可能会完成执行,但您可能还有其他尚未完成的异步工作.您可以使用exitdart:ioLIB立即返回一个退出代码.

import 'dart:io';

 main(){
    exit(42);
 }
Run Code Online (Sandbox Code Playgroud)

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


Mat*_*t B 6

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