gpt4 book ai didi

rust - 无法将数组传递给具有任意长度切片的 From 特征

转载 作者:行者123 更新时间:2023-12-04 16:37:07 29 4
gpt4 key购买 nike

我正在尝试实现 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]) {}

Playground

令人困惑的是,这与 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!()
}
}

Playground link

或者你可以使用完全限定的语法告诉 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!()
}
}

Playground link

关于rust - 无法将数组传递给具有任意长度切片的 From 特征,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/68530995/

29 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com