Struct1
我正在嘗試在陣列中實體化 struct ( ) 的實體。Struct1
存盤一個函式 ( ) 的實體,該函式method
采用泛型型別T
作為引數。以下代碼是我嘗試執行此操作的方式:
struct Struct1<T> {
method: fn(T)
}
fn main() {
let arrOfStructs = [
Struct1 {
method: fn(char) {
let a = char; //this does nothing useful, just a mock function
}
}
];
}
但我收到以下錯誤:
error: expected expression, found keyword `fn`
--> test.rs:8:21
|
7 | Struct1 {
| ------- while parsing this struct
8 | method: fn(char) {
| ^^ expected expression
error[E0063]: missing field `method` in initializer of `Struct1<_>`
--> test.rs:7:9
|
7 | Struct1 {
| ^^^^^^^ missing `method`
error: aborting due to 2 previous errors
For more information about this error, try `rustc --explain E0063`.
我假設列出的第二個錯誤只是因為實體的方法沒有正確實體化,因為第一個列出的錯誤。但我無法弄清楚第一個錯誤想說什么。據我所知,Rust 實體化可以是隱式型別的。我不知道還有什么問題。你們能幫我解決這個問題嗎?非常感激!
uj5u.com熱心網友回復:
在 Rust 中創建匿名函式(閉包)的語法不是您嘗試過的。相反,它是:
|arg1, arg2, arg3, ...| body
wherebody
可以是任何運算式,包括塊 ( || { body }
),引數可以具有型別注釋 ( |arg: Type| {}
),并且閉包可以使用->
:顯式指定回傳型別|| -> ReturnType {}
。
在你的例子中,
fn main() {
let arrOfStructs = [
Struct1 {
method: |char: YouHaveToSpecifyTheTypeHere| {
let a = char; //this does nothing useful, just a mock function
}
}
];
}
uj5u.com熱心網友回復:
只是為了補充答案:
建構式指標有兩種方法,一種是通過現有函式構造,另一種是使用不捕獲任何環境變數的閉包(匿名函式)
fn add_one(x: usize) -> usize {
x 1
}
// using an existing function
let ptr: fn(usize) -> usize = add_one;
assert_eq!(ptr(5), 6);
// using a closure that does not enclose variables
let clos: fn(usize) -> usize = |x| x 5;
assert_eq!(clos(5), 10);
鏈接到官方檔案
轉載請註明出處,本文鏈接:https://www.uj5u.com/qukuanlian/470329.html
上一篇:動態分配模塊名稱作為別名