首页 > 解决方案 > 在 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,我可以看到如何解决它,但同时有解决方法吗?

标签: rust

解决方案


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

#![feature(never_type)]
fn test_diverging(f: &Fn() -> !) {}

操场

请注意,这意味着该功能在稳定之前可能会发生变化,因此您接受未来编译器版本会破坏您的代码的风险。

也可以看看


推荐阅读