Nul*_*lik 2 methods function-pointers rust
使用函数指针在对象上调用方法的正确语法是什么?
struct Foo {
var: i32,
}
impl Foo {
fn method(&mut self, arg: i32) {
self.var = self.var + arg;
println!("var = {}", self.var);
}
}
fn main() {
let foo = Foo { var: 11 };
let func_ptr: Fn() = &foo.method;
(func_ptr).method(12);
}
Run Code Online (Sandbox Code Playgroud)
我收到此错误:
struct Foo {
var: i32,
}
impl Foo {
fn method(&mut self, arg: i32) {
self.var = self.var + arg;
println!("var = {}", self.var);
}
}
fn main() {
let foo = Foo { var: 11 };
let func_ptr: Fn() = &foo.method;
(func_ptr).method(12);
}
Run Code Online (Sandbox Code Playgroud)
我想我没有使用正确的func_ptr类型;什么是正确的类型?
方法不绑定self参数,但您可以通过它们的完全限定名称访问方法,如果您愿意,可以将它们保存在函数指针中。稍后,当您调用函数指针时,您必须自己提供self参数:
struct Foo {
var: i32,
}
impl Foo {
fn method(&mut self, value: i32) {
self.var += value;
println!("var = {}", self.var);
}
}
fn main() {
let mut foo = Foo { var: 11 };
let func_ptr = Foo::method;
func_ptr(&mut foo, 12);
}
Run Code Online (Sandbox Code Playgroud)
如果你想手动定义这个局部变量的类型,那么它将是以下内容:
let func_ptr: fn(&mut Foo, i32) = Foo::method;
Run Code Online (Sandbox Code Playgroud)
如果你想使用特征符号,你必须在引用后面使用它:
let func_ptr: &Fn(&mut Foo, i32) = &Foo::method;
Run Code Online (Sandbox Code Playgroud)