rust - 在Rust中如何将分歧函数作为参数传递给另一个函数

非分歧函数工作正常


fn test(f: &Fn() -> u8) {}



但我不能接受像这样的分歧功能


fn test_diverging(f: &Fn() ->!) {}



我得到以下错误


error[E0658]: The `!` type is experimental (see issue #35121)


 --> examples/two_tasks.rs:44:31


 |


44 | fn test_diverging(f: &Fn() ->!) {}


 | ^




看看的#35121 is,我可以看到这可以能会如何解决它,但是在这个时候有一个工作

时间:

!在某些情况下仍然是实验性的,这意味着它在稳定的编译器上不可用(截至今天为1.33)。 可以在夜间编译器上使用它,但你必须显式地选择 feature(never_type):


#![feature(never_type)]


fn test_diverging(f: &Fn() ->!) {}



( 游乐场 )

注意这意味着特性在稳定之前可能会改变,因此你将接受未来编译器版本将破坏你的代码的风险。

另请参阅

在函数和函数指针类型中使用类型已经很稳定。 因此,如果你不需要使用 Fn 特性,你可以只使用:


fn test_diverging(f: fn() ->!) {}


//^ note the lowercase f



test_diverging(|| panic!("ouch"));



这样就不能通过引用它们环境的闭包,但是不能捕获闭包和标准函数。

...