根据锈迹参考,
如果存在main
函数(snip),其返回类型必须是以下类型之一:
>
()
结果
但它没有说明当
main()
返回()
、Ok())
或Err(
据我测试,
这些行为是否在某些文档中定义、明确解释或保证?特别是,我可以假设
>
当
main()
返回Err(时,程序始终以
1
状态退出
main()
返回Err时显示的错误消息(
笔记:
>
我想要某种记录在案的保证,而不是经验性的解释。这就是为什么我添加了
#语言-律师
标签。
这个问题不是关于什么时候应该使用
()
以及什么时候应该使用Result
这种行为由RFC1937中添加的std::process::Termination
Trait控制。具体来说,“hidden”lang_start()
函数调用main()
,大致如下:
fn lang_start<T: Termination>(
main: fn() -> T,
argc: isize,
argv: *const *const u8
) -> !
也就是说,main()
可以返回任何T:终止
。在std
中有终止
的实现对于!
,()
,std::process:ExitCode
,以及一些Result
对于您的问题,语言律师模式:任何依赖于
终止的程序的确切行为都不是由语言本身严格指定的。它是
std
实现的一部分,而不是语言参考的一部分。这意味着,当使用不同版本的编译器(绑定到不同的std
版本)编译时,同一个程序可能会有不同的行为。Err
案例中打印错误的确切行为已记录在案,但未指定。由于RFC 1937明确寻找类似POSIX的行为,您可以合理地确信,该程序不会以惊人的方式运行(例如,在Err
-case中以状态0
退出)。
来自main
的不同返回值的行为由std::process::Termination
trait定义:
trait std::process::Termination
在主函数中实现任意返回类型的特性。
此特性记录为成功时返回libc::EXIT_SUCCESS
,错误时返回libc::EXIT_FAILURE
。
默认实现返回libc::EXIT_SUCCESS
,表示执行成功。如果出现故障,则返回libc::EXIT_failure
。
但在非POSIX系统上,这些值不能保证为0和1。
至于打印错误消息,Terination
需要E: Debug
并将Debug
impl打印到stderr,但我不相信它能保证保持完全相同。
impl<E: fmt::Debug> Termination for Result<!, E> {
fn report(self) -> ExitCode {
let Err(err) = self;
eprintln!("Error: {:?}", err);
ExitCode::FAILURE.report()
}
}
来源
问题内容: 我正在创建一个需要实施的游戏。在游戏过程中,我想在特定时间内暂停监听器。我尝试从方法返回false ,但方法仍然保持执行状态。还有其他方法可以让监听器暂停一段时间吗?任何人都请解释一下从错误返回的实际含义是什么? 问题答案: 从View文档中: 如果您返回,则告诉android媒体已经处理完毕。算了吧。 如果您返回,则基本上会说“不是我的问题,请其他人来处理此点击”。然后android
问题内容: 我创建了一个从API获取URL并返回URL字符串作为结果的函数。但是,Xcode给我此错误消息: void函数中非预期的非无效返回值 有谁知道为什么会这样吗? 问题答案: 使用闭包而不是返回值:
hashcode或hashmap是如何工作的,如果我们重写hashcode返回的总是常量,而重写的equals方法返回false,它如何能够在返回或删除时识别准确的对象?时间bean忘记了性能所有的东西,我的问题是它如何能够识别精确的对象,让我再解释一点,我有一个有两个字段的person类,已经重写了返回总是1的hashcode和重写了返回false的equals方法,已经创建了3个对象,对象1-
问题内容: 有人可以提供goroutine返回的澄清值。从goroutine返回的值是否已存入抵押。 例如: 我们是否应该避免在go例程中避免返回值? 问题答案: 快速查看一下组装输出显示 该函数确实将其结果存储到堆栈中 因此,当从goroutine调用它时,它会将结果存储到堆栈中。但是,这是一个新的堆栈,当goroutine结束时,该堆栈会被破坏,因此无法获取返回值。 但是,无法检索这些结果。
在 C 中,当一个应该返回对象的函数在没有 return 语句的情况下结束时会发生什么?会得到什么回报? 例如。
问题内容: 我试图在postgres函数内返回查询结果。我尝试了一下,并完美地工作了: 问题是我需要一些东西来返回以下结果: 我需要什么回报,或者应该改变什么才能实现这一目标? 问题答案: 这可以通过一个简单的SQL函数来完成: 可以在手册中找到更多详细信息和示例:http : //www.postgresql.org/docs/current/static/xfunc-sql.html#XFUN