特征和结构使用相同的方法名称时如何调用方法?

该程序之所以死是因为无限递归:


use std::any::Any;


trait Foo {

    fn get(&self, index: usize) -> Option<&Any>;

}


impl Foo for Vec<i32> {

    fn get(&self, index: usize) -> Option<&Any> {

        Vec::get(self, index).map(|v| v as &Any)

    }

}


fn main() {

    let v: Vec<i32> = vec![1, 2, 4];

    println!("Results: {:?}", v.get(0))

}

编译器本身对此发出警告:


warning: function cannot return without recurring

  --> src/main.rs:8:5

   |

8  |       fn get(&self, index: usize) -> Option<&Any> {

   |  _____^ starting here...

9  | |         Vec::get(self, index).map(|v| v as &Any)

10 | |     }

   | |_____^ ...ending here

   |

   = note: #[warn(unconditional_recursion)] on by default

note: recursive call site

  --> src/main.rs:9:9

   |

9  |         Vec::get(self, index).map(|v| v as &Any)

   |         ^^^^^^^^^^^^^^^^^^^^^

   = help: a `loop` may express intention better if this is on purpose

为什么在这种情况下通用调用语法不起作用?编译器不明白,我想打电话给Vec::get没有Foo::get。


如果我不想更改函数名称,该如何解决?


LEATH
浏览 500回答 1
1回答
打开App,查看更多内容
随时随地看视频慕课网APP