有一个函数接受入参&[S]
,此时使用S
时,实际上是一个引用。而这个引用可以转化为U
。该如何写呢?比如接受的可以是&[&[f64]]
。或者有没有办法让泛型可以是接收&[&[f64]]
,&[[f64;2]]
,&[[f64;3]]
呢。
1
共 8 条评论, 1 页
有一个函数接受入参&[S]
,此时使用S
时,实际上是一个引用。而这个引用可以转化为U
。该如何写呢?比如接受的可以是&[&[f64]]
。或者有没有办法让泛型可以是接收&[&[f64]]
,&[[f64;2]]
,&[[f64;3]]
呢。
评论区
写评论问题在于,想要得到的是Vec,A是由里面那个生成的。
会变成:
--
👇
aj3n: ```rust fn main() { foo(&[[1.0, 2.0]]); foo(&[&[1.0, 2.0]]); }
fn foo<Slc: AsRef<[f64]>, I: IntoIterator<Item = Slc>>(it: I) -> Vec { let mut v = vec![]; for slc in it { v.extend_from_slice(slc.as_ref()); } v }
这个不行的。
我之前就是遇到这个问题,报错是
error[E0277]: the trait bound
U: From<&S>is not satisfied
.--
👇
bestgopher: https://play.rust-lang.org/?version=stable&mode=debug&edition=2021&gist=6b4304122f5e7349c0f5503fe64fbfff
这样呢?
像这样?
https://play.rust-lang.org/?version=stable&mode=debug&edition=2021&gist=6b4304122f5e7349c0f5503fe64fbfff
这样呢?
我的问题,改下,输入是
&[[f64;2]]
--
👇
viruscamp: > 或者有没有办法让泛型可以是接收&[f64],&[f64;2],&[f64;3]呢。
&[f64;2]
能隐式转换(coercion) 成&[f64]
的吧忘了说。。。这个函数的return不带U。。。或许可以拆成两个函数?
--
👇
viruscamp: 这种?
凡是不好写 From 的就写 Into , 反过来也一样。
&[f64;2]
能隐式转换(coercion) 成&[f64]
的吧这种?
凡是不好写 From 的就写 Into , 反过来也一样。