源特征不可访问
Source trait is inaccessible
情况是(严重简化)这个(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
声明,然后再粘贴 use
。
这是工作示例。
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)
这里发生的事情是您偶然发现了以下故障:
您不能从私有模块中导出您的特征。这就是为什么您需要将 mod serialize
更改为 pub mod serialize
。例如,此 playpen example 表明导出 struct Export
有效,但取消注释 println!
将使其停止编译,因为我们使用了一个特征。
提示:帮助我了解可见性规则的一件事是生成 doc 文件并查看哪些 doc 文件可见。
情况是(严重简化)这个(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
声明,然后再粘贴 use
。
这是工作示例。
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)
这里发生的事情是您偶然发现了以下故障:
您不能从私有模块中导出您的特征。这就是为什么您需要将 mod serialize
更改为 pub mod serialize
。例如,此 playpen example 表明导出 struct Export
有效,但取消注释 println!
将使其停止编译,因为我们使用了一个特征。
提示:帮助我了解可见性规则的一件事是生成 doc 文件并查看哪些 doc 文件可见。