是否可以将带有引用的函数作为提供自有值的闭包参数传递?

阿金纳·阿尔坎(Akiner Alkan)

我试图简化闭包,但是当参数由闭包拥有但内部函数调用仅需要引用时,将我的闭包转换为对关联函数的引用时遇到问题。

#![deny(clippy::pedantic)]

fn main() {
    let borrowed_structs = vec![BorrowedStruct, BorrowedStruct];

    //Selected into_iter specifically to reproduce the minimal scenario that closure gets value instead of reference
    borrowed_structs
        .into_iter()
        .for_each(|consumed_struct: BorrowedStruct| MyStruct::my_method(&consumed_struct));
    // I want to write it with static method reference like following line:
    // for_each(MyStruct::my_method);
}

struct MyStruct;
struct BorrowedStruct;

impl MyStruct {
    fn my_method(prm: &BorrowedStruct) {
        prm.say_hello();
    }
}

impl BorrowedStruct {
    fn say_hello(&self) {
        println!("hello");
    }
}

操场

是否可以简化此代码:

into_iter().for_each(|consumed_struct: BorrowedStruct| MyStruct::my_method(&consumed_struct));

要以下内容:

into_iter().for_each(MyStruct::my_method)

请注意,into_iter这里仅重现了我在闭合中拥有值的情况。我知道iter可以在这种情况下使用,但这不是我正在研究的实际情况。

Shepmaster

您的一般问题的答案是否定的在将函数作为闭包参数传​​递时,类型必须完全匹配。

罗德里格(Rodrigo)的答案所示,有一种一次性的解决方法,但是一般的解决方案是像您所做的那样简单地自己获取参考:

something_taking_a_closure(|owned_value| some_function_or_method(&owned_value))

实际上,大约在两年前,作为人机工程学改造的一部分倡导了这种情况,但似乎没有人对此感兴趣。


在您的特定情况下,可以从闭包参数中删除该类型以使其更加简洁:

.for_each(|consumed_struct| MyStruct::my_method(&consumed_struct))

本文收集自互联网,转载请注明来源。

如有侵权,请联系 [email protected] 删除。

编辑于
0

我来说两句

0 条评论
登录 后参与评论

相关文章

是否可以将带有参数的函数作为prop传递,然后将该函数作为prop引用?

如何或可以将带有参数作为参数的函数传递给lua中的函数?

是否可以将带有参数的游标作为过程的参数传递?

将函数包装在闭包中以将其作为参数传递时是否有任何开销

是否可以将带有vars的json对象作为angularjs指令参数传递?

函数可以返回带有String参数并返回值的闭包吗?

如何将带有2个参数的函数作为参数传递给函数?

将带有参数的函数作为参数传递并返回通用类型

将带有三个参数的类变量作为参数传递给构造函数

带有接口的函数可以作为参数传递吗?

通过值传递而不是通过引用JavaScript闭包-是否有任何非包装技术?

Python:将带有参数的函数传递给函数

是否可以将带有作业列表的模板传递给jobList类型参数?

将带有自动参数的 lambda 传递给另一个函数是否合法

将带有可选/默认属性的对象作为参数的函数?

如何将带有参数作为参数的函数传递给Python中的另一个函数?

是否有语法糖用于将带有引用的子代作为模板传递给angular(2+)中的组件

将带有值的参数传递给函数无法正常工作

将带有参数的函数传递给time.AfterFunc

将带有参数的函数传递给VoidCallback

将带有参数的函数传递给select子句Codeigniter

Bash:将带有引号的参数传递给函数

将带有参数的函数传递给事件处理程序

React:将带有给定参数的函数传递给 child

如何将带有args作为参数的成员函数传递给另一个成员函数?

是否可以将* this作为接受引用(&)的函数的参数传递?

创建带有参数闭包的回调函数,而没有“可能超出借用的值”或“此闭包实现`FnOnce`,而不是`Fn`”

我可以将带有预定义参数的参数列表动态传递给python函数吗?

带有可选闭包的快速参数