gpt4 book ai didi

rust - 如何在Rust中编写一个通用函数,该函数可以接受实现特定属性的任何结构?

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

我试图理解Rust中的泛型,并试图编写一个泛型函数,该泛型函数可以将具有foo属性的任何结构乘以10。当我使用此代码时,出现错误no field foo on type T

struct A {
foo: i8,
bar: String,
}

struct B {
foo: i8,
}

fn go<T>(v: T) {
v.foo * 10
}

fn main() {
let a = A {foo: 1, bar: "bar".to_string()};
let b = B {foo: 2};
println!("{:?},{:?}", go(a), go(b))
}
如何编写可以接受实现 foo: i8属性的任何结构的泛型函数?

最佳答案

Rust没有JavaScript所具有的属性,因此您需要做一些不同的事情。您将要使用特征来将foo功能公开为一种方法,然后为AB实现该特征:

trait Foo {
fn foo(&self) -> i8;
}

struct A {
foo: i8,
bar: String,
}

impl Foo for A {
fn foo(&self) -> i8 {
self.foo
}
}

struct B {
foo: i8,
}

impl Foo for B {
fn foo(&self) -> i8 {
self.foo
}
}

fn go<T: Foo>(v: T) -> i8 {
v.foo() * 10
}

fn main() {
let a = A {
foo: 1,
bar: "bar".to_string(),
};
let b = B { foo: 2 };
println!("{:?},{:?}", go(a), go(b))
}
(请注意,我还使 go返回了上面的值。)
这提供了 Foo特性,该特性公开了 foo作为一种方法,将其实现为 AB,然后使 go需要 T来实现 Foo。这是完成此目标的最简单,最直接的方法。

关于rust - 如何在Rust中编写一个通用函数,该函数可以接受实现特定属性的任何结构?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/63759973/

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