gpt4 book ai didi

rust - 源特征不可访问

转载 作者:行者123 更新时间:2023-11-29 08:19:16 26 4
gpt4 key购买 nike

情况是(严重简化)这个(playpen):

mod tokentree {
pub struct TokenTree;
mod serialize {
use std::collections::BTreeMap;
use super::TokenTree;
#[derive(Debug)]
pub struct InternStr;
pub trait InternStrsExt {
fn intern_strs(&self) -> BTreeMap<&str, InternStr>;
}
impl InternStrsExt for [TokenTree] {
fn intern_strs(&self) -> BTreeMap<&str, InternStr> { BTreeMap::new() }
}
}
pub use self::serialize::{InternStrsExt, InternStr};
}
use tokentree::*;

fn main() {
println!("{:?}", [TokenTree].intern_strs());
}

我收到以下错误(夜间和测试版):

<anon>:20:22: 20:47 error: source trait is inaccessible
<anon>:20 println!("{:?}", [TokenTree].intern_strs());
^~~~~~~~~~~~~~~~~~~~~~~~~

我的问题是我什至不知道这是什么意思。

最佳答案

它需要一个发布声明。你的声明也到处都是。推荐的形式是先粘贴您的 pub mod 声明,然后再使用

这是工作示例。

mod tokentree {
pub struct TokenTree;
pub mod serialize {
use std::collections::BTreeMap;
use super::TokenTree;
#[derive(Debug)]
pub struct InternStr;
pub trait InternStrsExt {
fn intern_strs(&self) -> BTreeMap<&str, InternStr>;
}
impl InternStrsExt for [TokenTree] {
fn intern_strs(&self) -> BTreeMap<&str, InternStr> { BTreeMap::new() }
}
}
pub use self::serialize::{InternStrsExt, InternStr};
}
pub use tokentree::*;

fn main() {
println!("{:?}", [TokenTree].intern_strs());
}

( playpen )

这里发生的事情是您偶然发现了以下故障:

您不能从私有(private)模块中导出您的特征。这就是为什么您需要将 mod serialize 更改为 pub mod serialize。例如这个 playpen example演示导出 struct Export 是有效的,但是取消注释 println! 将使其停止编译,因为我们使用了一个特征。

提示:可以帮助我了解可见性规则的一件事是生成 doc 文件并查看哪些 doc 文件是可见的。

关于rust - 源特征不可访问,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/30224795/

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