我试图在Rust中创建一个模块,然后从另一个文件中使用它。这是我的文件结构:
TemplateSyntaxError at /
Could not parse the remainder: '['cookie_name']' from 'request.COOKIES.['cookie_name']'
这是Cargo.toml:
matthias@X1:~/projects/bitter-oyster$ tree
.
├── Cargo.lock
├── Cargo.toml
├── Readme.md
├── src
│ ├── liblib.rlib
│ ├── lib.rs
│ ├── main.rs
│ ├── main.rs~
│ └── plot
│ ├── line.rs
│ └── mod.rs
└── target
└── debug
├── bitter_oyster.d
├── build
├── deps
├── examples
├── libbitter_oyster.rlib
└── native
8 directories, 11 files
这是主要的:
[package]
name = "bitter-oyster"
version = "0.1.0"
authors = ["matthias"]
[dependencies]
这是lib.rs:
extern crate plot;
fn main() {
println!("----");
plot::line::test();
}
这是plot / mod.rs
mod plot;
这是plot / line.rs
mod line;
当我尝试使用:pub fn test(){
println!("Here line");
}
编译我的程序时,我得到:
cargo run
如何编译我的程序?据我可以从在线文档中看出这应该有效,但它没有。
答案 0 :(得分:16)
您有以下问题:
您必须在extern crate bitter_oyster;
中使用main.rs
,因为生成的二进制文件使用您的包,二进制文件不是它的一部分。
此外,请在bitter_oyster::plot::line::test();
中拨打main.rs
,而不是plot::line::test();
。 plot
是bitter_oyster
包中的模块,例如line
。您指的是test
函数及其完全限定名称。
确保每个模块都以完全限定名称导出。您可以使用pub
关键字公开模块,例如pub mod plot;
您可以在此处找到有关Rust模块系统的更多信息:https://doc.rust-lang.org/book/crates-and-modules.html
模块结构的工作副本如下:
的src / main.rs:
extern crate bitter_oyster;
fn main() {
println!("----");
bitter_oyster::plot::line::test();
}
的src / lib.rs:
pub mod plot;
的src /情节/ mod.rs:
pub mod line;
src / plot / line.rs:
pub fn test(){
println!("Here line");
}
答案 1 :(得分:10)
如果您看到此错误:
error[E0463]: can't find crate for `PACKAGE`
|
1 | extern crate PACKAGE;
| ^^^^^^^^^^^^^^^^^^^^^ can't find crate
可能是您没有将所需的包添加到Cargo.toml
中的依赖项列表中:
[dependencies]
PACKAGE = "1.2.3"
答案 2 :(得分:7)
要添加到给定的答案,编译为cdylib
(docs)的库可能会在您尝试在另一个项目中引用它时生成此错误。我通过分离我希望在常规lib
项目中重用的代码来解决它。