Dart被认为是务实,直观等。 我想知道为什么如果返回int,顶级main()不会设置exitcode? p>
我知道,您可以通过dart:io.exitCode=
或dart:io.exit()
进行设置。
问题是为什么语言设计师决定放弃这种流行的惯例?
#!/path/to/dart --checked
int main() {
int myExitCode = 5;
return myExitCode;
}
它返回0(如documentation中所述),但在命令行界,它只是愚蠢。 它甚至没有警告你(编译器检查模式,dartanalyzer)。脚本只是默默地返回0.背后有什么理由吗?
更新
答案 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
这在浏览器中不可用。
但是,我个人认为,如果问题的代码中显示出如此有线和意外的行为,那就不会那么糟糕了。