我正在尝试实现 From<&[&str]>
对于我的一种类型。它应该消耗任意长度的行(仅在运行时已知)并从行中获取数据。编译器提示 &[&str; 2]
不是 &[&str]
,即它不能将固定大小的切片转换为任意长度的切片。确切的消息是:the trait 'From<&[&str; 2]>' is not implemented for 'LineEater'
这是我的尝试:
fn main() {
let data = ["foo", "bar"];
// works
foo(&data);
// doesn't work
LineEater::from(&data);
// also doesn't work
let data: &[&str] = data.into();
LineEater::from(&data);
}
struct LineEater;
impl From<&[&str]> for LineEater {
fn from(_lines: &[&str]) -> Self {
todo!()
}
}
fn foo(_slice: &[&str]) {}
令人困惑的是,这与 foo()
的调用一起工作但不是 from
的电话.在第一种情况下,Rust 可以“转换”[&str; 2]
。至 &[&str]
但不是在后者。为什么会这样,我该如何解决?
我正在使用 Rust 1.55-nightly
最佳答案
您可以使用范围运算符:
fn main() {
let data = ["foo", "bar"];
LineEater::from(&data[..]);
}
struct LineEater;
impl From<&[&str]> for LineEater {
fn from(_lines: &[&str]) -> Self {
todo!()
}
}
或者你可以使用完全限定的语法告诉 Rust 你想为 &[&str]
使用 From
实现:
fn main() {
let data = ["foo", "bar"];
<LineEater as From<&[&str]>>::from(&data);
}
struct LineEater;
impl From<&[&str]> for LineEater {
fn from(_lines: &[&str]) -> Self {
todo!()
}
}
关于rust - 无法将数组传递给具有任意长度切片的 From 特征,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/68530995/