gpt4 book ai didi

rust - 外部模块中不可见的通用特征

转载 作者:行者123 更新时间:2023-11-29 07:57:55 24 4
gpt4 key购买 nike

我有下一个代码:

pub trait Osm<T> {
fn get_points(&self) -> Vec<Point<T>>;
}

#[deriving(Show, PartialEq, Clone)]
pub struct Point<T> {
pub lat: T,
pub lon: T,
}

#[deriving(Show, PartialEq, Clone)]
pub struct Node<T> {
pub point: Point<T>,
}

impl<T: Clone> Osm<T> for Node<T> {
fn get_points(&self) -> Vec<Point<T>> {
return vec![self.point.clone()];
}
}

当我将此代码放入 main 并调用时:

let b = Node { point: Point { lat: 10i64, lon: 12i64 }};
println!("{}", b.get_points());

一切正常。

但是当我把它放到另一个模块时会得到下一个错误:

/prj/src/main.rs:64:22: 64:34 error: type `osm::test::Node<i64>` does not implement any method in scope named `get_points`
/prj/src/main.rs:64 println!("{}", b.get_points());
^~~~~~~~~~~~
error: aborting due to previous error

我有点困惑为什么它不起作用,可能是 make private 方法,因为对于 main 来说一切正常,但是当我尝试使用 pub 关键字时它显示 unnecessary visibility qualifier构建错误。那么我可以为外部模块使用通用特征吗?

最佳答案

要在不同的模块中使用特征方法,您需要先使用特征。

所以 use osm::test::Osm; 应该可以。这是 use 语句导入功能而不只是使标识符可用的唯一情况。

此外,方法不需要为 pub trait 显式 pub,因为导出 trait 会导出方法。

关于rust - 外部模块中不可见的通用特征,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/26614777/

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