[英]In Rust how do I pass a diverging function as parameter to another function
非分歧函數工作正常
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我可以看到它可能如何解決它,但同時有一個解決方法?
!
在某些情況下仍然是實驗性的,這意味着它在穩定的編譯器上不可用(截至今天為1.33)。 您可以在夜間編譯器上使用它,但您必須明確選擇feature(never_type)
:
#![feature(never_type)]
fn test_diverging(f: &Fn() -> !) {}
( 游樂場 )
請注意,這意味着該功能可能會在穩定之前發生變化,因此您將接受將來的編譯器版本將破壞您的代碼的風險。
使用never類型的函數和函數指針類型已經很穩定。 因此,如果您不需要使用Fn
特征,您可以使用:
fn test_diverging(f: fn() -> !) {}
// ^ note the lowercase f
test_diverging(|| panic!("ouch"));
這樣你就無法傳遞引用其環境的閉包,但非捕獲閉包和標准函數工作正常。
要使用不穩定的功能,您需要使用夜間工具鏈並激活所需的不穩定功能。
#![feature(never_type)]
fn test_diverging(f: &Fn() -> !) {}
也可以看看:
聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.