Hol*_*bor 1 methods tuples rust
将元组解包为参数并使用这些值调用函数包含在是否可以将元组解包为函数参数?,但是是否可以对方法执行相同的操作?
#![feature(fn_traits)]
struct Foo;
impl Foo {
fn method(&self, a: i32, b: i32) {
println!("{:?}, {:?}", a, b);
}
}
fn main() {
let foo = Foo;
let tuple = (10, 42);
// does not compile
//foo.method.call(tuple);
// nor this one
//std::ops::Fn::call(&foo.method, tuple);
}
Run Code Online (Sandbox Code Playgroud)
对于两者我都收到以下错误:
#![feature(fn_traits)]
struct Foo;
impl Foo {
fn method(&self, a: i32, b: i32) {
println!("{:?}, {:?}", a, b);
}
}
fn main() {
let foo = Foo;
let tuple = (10, 42);
// does not compile
//foo.method.call(tuple);
// nor this one
//std::ops::Fn::call(&foo.method, tuple);
}
Run Code Online (Sandbox Code Playgroud)
我不控制我调用的方法,因此更改签名以接受元组不是一个选项。
方法是函数
new. 这些被引用为Type::function_name.Self作为第一个参数。因此,您需要使用Foo::method并提供匹配self:
#![feature(fn_traits)]
struct Foo;
impl Foo {
fn method(&self, a: i32, b: i32) {
println!("{:?}, {:?}", a, b);
}
}
fn main() {
let foo = Foo;
let tuple = (&foo, 10, 42);
std::ops::Fn::call(&Foo::method, tuple);
}
Run Code Online (Sandbox Code Playgroud)
也可以看看: