gpt4 book ai didi

rust - 如何在 Rust 中使用 From trait 实现双向转换?

转载 作者:行者123 更新时间:2023-12-03 11:41:15 25 4
gpt4 key购买 nike

假设我有以下类型:

#[derive(Default)]
struct Foo(pub i32); // public

由于它是一个具有公共(public)成员的元组,因此从/到 i32 的任何转换可以简单地使用 0成员:
let foo = Foo::default();

let num: i32 = foo.0; // Foo to i32
let goo = Foo(123); // i32 to Foo

现在我想做 0成员非公开,执行 From trait :
#[derive(Default)]
struct Foo(i32); // non-public

impl From<i32> for Foo {
fn from(n: i32) -> Foo {
Foo(n)
}
}

但是从 i32 开始转换失败至 Foo :
let foo = ay::Foo::default();
let num: i32 = foo.into(); // error!
let goo = ay::Foo::from(123); // okay

实现这种双向转换的正确方法是什么? rust 操场 here .

最佳答案

您必须手动实现另一个方向( impl From<Foo> for i32 ):

mod x {
#[derive(Default)]
pub struct Foo(i32);

impl From<i32> for Foo {
fn from(n: i32) -> Foo {
Foo(n)
}
}

impl From<Foo> for i32 {
fn from(foo: Foo) -> i32 {
foo.0
}
}
}

fn main() {
let foo = x::Foo::default();
let _num: i32 = foo.into(); // okay
let _goo = x::Foo::from(123); // also okay
}

您可以在 playground 中进行测试

关于rust - 如何在 Rust 中使用 From trait 实现双向转换?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/62282033/

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