gpt4 book ai didi

methods - 是否可以将元组解压缩为方法参数?

转载 作者:行者123 更新时间:2023-12-03 11:41:25 24 4
gpt4 key购买 nike

将元组解压缩为参数并使用这些值调用函数已由Is it possible to unpack a tuple into function arguments?涵盖,但是是否可以对方法做同样的技巧?

#![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);
}

对于这两者,我都会收到以下错误:

error[E0615]: attempted to take value of method `method` on type `Foo`
--> src/main.rs:20:9
|
20 | foo.method.call(tuple);
| ^^^^^^ help: use parentheses to call the method: `method(...)`

我不控制调用的方法,因此不能更改签名以接受元组。

最佳答案

方法是具有以下功能的功能

  • 与类型关联(称为关联函数)。大多数人都熟悉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);
    }

    也可以看看:
  • Fully-qualified syntax
  • What types are valid for the `self` parameter of a method?
  • 关于methods - 是否可以将元组解压缩为方法参数?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/60381690/

    24 4 0
    Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
    广告合作:1813099741@qq.com 6ren.com