Rust 如何访问嵌套模块中定义的符号?
我使用的是rustc 1.0.0(a59de37e9 2015-05-13)(构建于2015-05-14)Rust 如何访问嵌套模块中定义的符号?,rust,Rust,我使用的是rustc 1.0.0(a59de37e9 2015-05-13)(构建于2015-05-14) src ├── 梅因 └── 核心 ├── 国防部 └── expressionType.rs main.rs: mod core; use core::expressionType; fn main() { let t = expressionType::ExpressionType.Integer; println!("Hello, world!") } expr
src
├── 梅因
└── 核心
├── 国防部
└── expressionType.rs
main.rs:
mod core;
use core::expressionType;
fn main() {
let t = expressionType::ExpressionType.Integer;
println!("Hello, world!")
}
expressionType.rs:
pub enum ExpressionType {
Integer,
List(Box<ExpressionType>),
Function(Box<ExpressionType>, Box<ExpressionType>)
}
从src,当我尝试做rustc main.rs时,我得到
main.rs:5:13: 5:43 error: unresolved name `expressionType::ExpressionType`
main.rs:5 let t = expressionType::ExpressionType.Integer;
^~~~~~~~~~~~~~~~~~~~~~~~~~~~~~
error: aborting due to previous error
我还尝试了core::expressionType::expressionType和expressionType.expressionType
我错过什么了吗?为什么我不能从expressionType.rs访问枚举
UPD1:我还试图添加
pub use self::expressionType::ExpressionType;
到mod.rs,但在main.rs中,核心::ExpressionType和ExpressionType::ExpressionType都不可用。您需要编写
ExpressionType::Integer
,而不是ExpressionType.Integer
(:
而不是)。在后一种情况下,编译器正在查找名为ExpressionType
的值,例如变量或常量。您需要编写ExpressionType::Integer
,而不是ExpressionType.Integer
(:
,而不是)。在后一种情况下,编译器正在查找名为ExpressionType
的值,例如变量或常量。您需要编写ExpressionType::Integer
,而不是ExpressionType.Integer
(:
,而不是)。在后一种情况下,编译器正在查找名为ExpressionType
的值,例如变量或常量。您需要编写ExpressionType::Integer
,而不是ExpressionType.Integer
(:
,而不是)。在后一种情况下,编译器正在寻找一个名为ExpressionType
的值,例如变量或常量,按照惯例,这不是Rust中的工作方式<代码>表达式类型
通常不应该放在它自己的模块中,它应该直接放在核心
模块中。然后core::ExpressionType::Integer
,&c。在与此相关的情况下,它可能会放在自己的模块中,但即使这样,它通常也只能直接在核心下导出(pub enum ExpressionType
,mod expression\u type;pub use expression\u type::ExpressionType;
)。还要注意的是,模块名是按约定的大小写的<代码>表达式类型
通常不应该放在它自己的模块中,它应该直接放在核心
模块中。然后core::ExpressionType::Integer
,&c。在与此相关的情况下,它可能会放在自己的模块中,但即使这样,它通常也只能直接在核心下导出(pub enum ExpressionType
,mod expression\u type;pub use expression\u type::ExpressionType;
)。还要注意的是,模块名是按约定的大小写的<代码>表达式类型
通常不应该放在它自己的模块中,它应该直接放在核心
模块中。然后core::ExpressionType::Integer
,&c。在与此相关的情况下,它可能会放在自己的模块中,但即使这样,它通常也只能直接在核心下导出(pub enum ExpressionType
,mod expression\u type;pub use expression\u type::ExpressionType;
)。还要注意的是,模块名是按约定的大小写的<代码>表达式类型
通常不应该放在它自己的模块中,它应该直接放在核心
模块中。然后core::ExpressionType::Integer
,&c。在与此相关的情况下,它可能会放在自己的模块中,但即使这样,它通常也只能直接在核心下导出(pub enum ExpressionType
,mod expression\u type;pub use expression\u type::ExpressionType;
)。还要注意的是,模块名是按惯例大小写的。天哪,这个错误描述非常混乱。@LOST:太糟糕了;我认为它的技术原因大致是它只在值空间中查找,而ExpressionType
在类型/模块空间中,所以它根本看不到它。@ChrisMorgan:你知道关于这个问题的任何错误报告吗?我知道在改进错误消息方面已经出现了一系列错误(例如,由于某些通用参数约束未得到满足而未考虑某个方法),但我不知道这一特定的“错误空间”问题的任何错误。@MatthieuM.:我不知道任何错误,但我根本没有搜索过。(还请记住,我记不清我所指概念的行话,我使用的术语可能不正确。)@ChrisMorgan:wrt行话:我也有同样的问题:/Gosh,这个错误描述非常混乱。@LOST:相当糟糕;我认为它的技术原因大致是它只在值空间中查找,而ExpressionType
在类型/模块空间中,所以它根本看不到它。@ChrisMorgan:你知道关于这个问题的任何错误报告吗?我知道在改进错误消息方面已经出现了一系列错误(例如,由于某些通用参数约束未得到满足而未考虑某个方法),但我不知道这一特定的“错误空间”问题的任何错误。@MatthieuM.:我不知道任何错误,但我根本没有搜索过。(还请记住,我记不清我所指概念的行话,我使用的术语可能不正确。)@ChrisMorgan:wrt行话:我也有同样的问题:/Gosh,这个错误描述非常混乱。@LOST:相当糟糕;我认为它的技术原因大致上是它只在值空间中查找,其中ExpressionType
在类型/模块空间中,所以它是这样做的
pub use self::expressionType::ExpressionType;