如何在Rust中创建Vec <T>,其中T:Into <_>?

卢卡斯

这是我的示例代码。我正在尝试将a传递Vec<T>给其中的函数T: Into<_>

enum Test {
  FN(Box<dyn Fn()>),
  STR(String),
}

impl<F> From<F> for Test
  where F: Fn() + 'static
{
  fn from(f: F) -> Self {
    Self::FN(Box::new(f))
  }
}

impl From<String> for Test {
  fn from(s: String) -> Self {
    Self::STR(s)
  }
}

fn main() {
  into(vec![
    || println!("func 1"),
    || println!("func 2"),
    String::from("string 1"),
  ]);
}

fn into<T>(v: Vec<T>)
  where T: Into<Test>
{
  for test in v {
    let test = test.into();
    match test {
      Test::FN(func) => func(),
      Test::STR(s) => println!("{}", s),
    }
  }
}

错误发生在第二次关闭时:

expected closure, found a different closure

问题在于Into <_>不能调整为动态,因为它是Sized,所以不起作用!

我希望输出:

func 1
func 2
string 1

有任何答案或想法吗?

卢卡斯

感谢您提供所有答案,我通过创建自己的MyInto特征找到了自己的解决方案


trait MyInto {
  fn my_into(&self) -> Test;
}

enum Test<'l> {
  FN(&'l dyn Fn()),
  STR(String),
}

impl<F> MyInto for F
  where F: Fn() + 'static
{
  fn my_into(&self) -> Test {
    Test::FN(self)
  }
}

impl MyInto for String {
  fn my_into(&self) -> Test {
    Test::STR(self.to_owned())
  }
}

fn main() {
  into(vec![
    &|| println!("func 1"),
    &|| println!("func 2"),
    &String::from("string 1"),
  ]);
}

fn into(v: Vec<&dyn MyInto>) {
  for test in v {
    let test = test.my_into();
    match test {
      Test::FN(func) => func(),
      Test::STR(s) => println!("{}", s),
    }
  }
}

现在的输出是:

func 1
func 2
string 1

现在可以使用dynin &dyn MyInto,因为MyInto不是Sized

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

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

编辑于
0

我来说两句

0条评论
登录后参与评论

相关文章

来自分类Dev

如何在Rust中为Vec <T>分配空间?

来自分类Dev

如何迭代List <T>,其中T:MyClass

来自分类Dev

如何迭代List <T>,其中T:MyClass

来自分类Dev

创建Action <T>,其中T是Method参数的基类

来自分类Dev

创建Action <T>,其中T是Method参数的基类

来自分类Dev

在Rust中接受&Vec <T>和&Vec <&T>的函数

来自分类Dev

interface <T>其中T:类

来自分类Dev

如何在方法定义中不指定T的情况下为ICollection <T>定义扩展方法,其中T:IMyInterface

来自分类Dev

如何在子类中使用`Class <T>`,其中T是父类

来自分类Dev

如何在Silverlight中创建List <T>?

来自分类Dev

如何确定属性是否为List <T>,其中T为自定义类型?

来自分类Dev

如何检查MethodInfo是否匹配通用类型T的委托,其中T是Action或Func?

来自分类Dev

给定“ T”和“ U”,其中“ T扩展了U”,如何返回“ U”

来自分类Dev

如何将PropertyInfo值转换为ICollection <T>,其中T可以是任何类

来自分类Dev

什么是C ++中的运算符T *(其中T是模板参数)?

来自分类Dev

将Object <T>转换为Object <A>,其中A包含在T中

来自分类Dev

如何将Rust`Vec <T>`暴露给FFI?

来自分类Dev

其中T:IEnumerable <T>方法约束

来自分类Dev

声明List <IEntity <T >>,其中T:class

来自分类Dev

RestSharp ExecAsync <T>,其中T是嵌套对象

来自分类Dev

声明List <IEntity <T >>,其中T:class

来自分类Dev

'Classname <T>其中T:Classname <T>'是做什么的?

来自分类Dev

Oracle:从T1内部联接T2中选择,其中T3中的日期,但没有与T3相关的键

来自分类Dev

如何将IList <T1>分配给IList <T2>,其中T1是T2的子类型?

来自分类Dev

如何将IList <T1>分配给IList <T2>,其中T1是T2的子类型?

来自分类Dev

如何在vb.net中创建类型T的对象

来自分类Dev

如何在C#文件中创建List <T>实例

来自分类Dev

如何在Kotlin中为enumValues <T>创建通用函数?

来自分类Dev

如何在Vec <T>中将元素从x返回到y?

Related 相关文章

  1. 1

    如何在Rust中为Vec <T>分配空间?

  2. 2

    如何迭代List <T>,其中T:MyClass

  3. 3

    如何迭代List <T>,其中T:MyClass

  4. 4

    创建Action <T>,其中T是Method参数的基类

  5. 5

    创建Action <T>,其中T是Method参数的基类

  6. 6

    在Rust中接受&Vec <T>和&Vec <&T>的函数

  7. 7

    interface <T>其中T:类

  8. 8

    如何在方法定义中不指定T的情况下为ICollection <T>定义扩展方法,其中T:IMyInterface

  9. 9

    如何在子类中使用`Class <T>`,其中T是父类

  10. 10

    如何在Silverlight中创建List <T>?

  11. 11

    如何确定属性是否为List <T>,其中T为自定义类型?

  12. 12

    如何检查MethodInfo是否匹配通用类型T的委托,其中T是Action或Func?

  13. 13

    给定“ T”和“ U”,其中“ T扩展了U”,如何返回“ U”

  14. 14

    如何将PropertyInfo值转换为ICollection <T>,其中T可以是任何类

  15. 15

    什么是C ++中的运算符T *(其中T是模板参数)?

  16. 16

    将Object <T>转换为Object <A>,其中A包含在T中

  17. 17

    如何将Rust`Vec <T>`暴露给FFI?

  18. 18

    其中T:IEnumerable <T>方法约束

  19. 19

    声明List <IEntity <T >>,其中T:class

  20. 20

    RestSharp ExecAsync <T>,其中T是嵌套对象

  21. 21

    声明List <IEntity <T >>,其中T:class

  22. 22

    'Classname <T>其中T:Classname <T>'是做什么的?

  23. 23

    Oracle:从T1内部联接T2中选择,其中T3中的日期,但没有与T3相关的键

  24. 24

    如何将IList <T1>分配给IList <T2>,其中T1是T2的子类型?

  25. 25

    如何将IList <T1>分配给IList <T2>,其中T1是T2的子类型?

  26. 26

    如何在vb.net中创建类型T的对象

  27. 27

    如何在C#文件中创建List <T>实例

  28. 28

    如何在Kotlin中为enumValues <T>创建通用函数?

  29. 29

    如何在Vec <T>中将元素从x返回到y?

热门标签

归档