Module 在单独的文件中定义特征

Module 在单独的文件中定义特征,module,rust,traits,Module,Rust,Traits,我定义了两个结构 pub struct Rect{ 酒吧宽度:f32, 酒吧长度:f32 } //及 酒吧结构圈{ 酒吧半径:f32 } 然后我定义了一个trait区域,并为圆圈和矩形实现了这个trait。当我将所有源代码放在一个main.rs文件中时,一切都正常 现在我想组织我的源代码。特别是,我想创建一个文件夹/src/geometry,在该文件夹下创建三个rs文件: ///src/geometry/rect.rs pub struct Rect{ 酒吧宽度:f32, 酒吧长度:f32 }

我定义了两个结构

pub struct Rect{
酒吧宽度:f32,
酒吧长度:f32
}
//及
酒吧结构圈{
酒吧半径:f32
}
然后我定义了一个trait
区域
,并为
圆圈
矩形
实现了这个trait。当我将所有源代码放在一个
main.rs
文件中时,一切都正常

现在我想组织我的源代码。特别是,我想创建一个文件夹
/src/geometry
,在该文件夹下创建三个
rs
文件:

///src/geometry/rect.rs
pub struct Rect{
酒吧宽度:f32,
酒吧长度:f32
}
///src/geometry/circle.rs
酒吧结构圈{
酒吧半径:f32
}

///src/geometry/traits.rs
酒吧特色区{
fn区域(和自身)->f32;
}
最后,我想使用
main.rs
中的这些结构

我花了几天时间,通读了我在互联网上找到的所有例子,但我仍然无法让它发挥作用。有什么建议吗

更新: 项目结构:

src
  geometry
     rect.rs 
     circle.rs
     traits.rs
  geometry.rs
  main.rs
//rect.rs
pub struct Rect{
酒吧宽度:f32,
酒吧长度:f32
}
Rect的impl区域{
fn区域(自身)->f32{
self.width*self.length
}
}
Rect的impl周长{
fn周长(和自身)->f32{
2.0*(自宽+自长)
}
}
//circle.rs
酒吧结构圈{
酒吧半径:f32
}
圆的impl区域{
fn区域(自身)->f32{
3.14*自半径*自半径
}
}
圆的impl周长{
fn周长(和自身)->f32{
2.0*3.14*自半径
}
}
//traits.rs
酒吧特征周长{
fn周长(和自身)->f32;
}
酒吧特色区{
fn区域(和自身)->f32;
}
//geometry.rs
pub mod rect;
酒吧时尚圈;
//main.rs
几何模型;
使用geometry::rect::rect;
使用几何体::圆::圆;
fn main(){
设rect=rect{width:1.0,length:2.0};
设圆=圆{半径:2.3};
println!(“{}”,rect.area());
println!(“{}”,circle.area());
}
编译错误MSGS

error[E0405]: cannot find trait `Area` in this scope
 --> src/geometry/rect.rs:6:6
  |
6 | impl Area for Rect {
  |      ^^^^ not found in this scope

error[E0405]: cannot find trait `Perimeter` in this scope
  --> src/geometry/rect.rs:12:6
   |
12 | impl Perimeter for Rect {
   |      ^^^^^^^^^ not found in this scope

error[E0405]: cannot find trait `Area` in this scope
 --> src/geometry/circle.rs:5:6
  |
5 | impl Area for Circle {
  |      ^^^^ not found in this scope

error[E0405]: cannot find trait `Perimeter` in this scope
  --> src/geometry/circle.rs:11:6
   |
11 | impl Perimeter for Circle {
   |      ^^^^^^^^^ not found in this scope

error: aborting due to 4 previous errors

For more information about this error, try `rustc --explain E0405`.
error: could not compile `chapter10`.

首先,在
circle.rs
rect.rs
中,您需要添加
使用板条箱::几何体::特征:{面积,周长}:这将处理粘贴的错误

然后,在
main.rs
中,您需要
使用geometry::traits::Area
否则不能调用
.area()
方法。为此,您需要在
geometry.rs
pub mod traits中公开
traits
模块(或至少在板条箱内公开:
pub(板条箱)mod traits;


就个人而言,我还想将
geometry.rs
重命名为
geometry/mod.rs

这里的“不工作”到底是什么样子?出现了哪些编译器错误?
mod.rs
是Rust开发人员普遍接受的标准吗?正如我所注意到的,它广泛应用于Rust源代码中。@HardFork
foo/mod.rs
是放置
foo.rs
的另一种方式,具有相同的含义。显式目录使得创建更多的子模块变得更加容易,但除此之外,这是一个品味问题。