< 返回版块

gengfanbin 发表于 2021-09-30 17:43

Tags:mod use crate super

没看懂他们为什么使用的关键字不一样还报错,官方文档中没找到相关解释,他们明明在同一个目录结构中.yew项目的pub_sub案例中在同一目录下有三个文件main.rs,producer.rs,subscriber.rs都使用了event_bus.rs,却分别使用了

mod event_bus;

use crate::event_bus

use super::event_bus

三种方式 看了一些解释,但解释不通啊,我尝试互换,会报错,但是只是告诉你有问题,却不知道是因为什么 有大佬帮忙解释一下三个的区别么

评论区

写评论
作者 gengfanbin 2021-10-12 15:24

项目开源地址https://gitee.com/mirrors/Yew/tree/master/examples/pub_sub

--
👇
gengfanbin:

--
👇
gengfanbin: 感谢,但是并没有解决我的疑惑,这里不能发截图,我的疑惑是为什么同一文件目录下的文件引用却要使用不同的方式,而我并不知道在什么情况下该使用什么,明明都是一个目录下,为何会不同?重点在producer.rs文件和subscriber.rs文件的第一行的区别

👇
Freddie Mercury: 可以看下下面这个文章

http://www.sheshbabu.com/posts/rust-module-system/

--
👇
gengfanbin: 嗯,大佬, 道理我都懂 -.-!!!,但是你看我上面那个回复里的案例, 我不清楚为什么在同一级别中两个不同的文件引入的方式不一样, 没搞懂因为什么, 是我漏掉了什么吗?

--
👇
Aya0wind: 一个crate是一颗树,里面每一个mod都是这棵树的子节点。
crate关键字特指这棵树的根节点,也就是main.rs或者lib.rs所在的mod,也就是根mod。
比如use crate::mod1::xx,就是在当前mod中导入根节点下面一个叫mod1的子节点的mod里的内容xx;
而super指的是当前mod的父mod,比如上面说到的mod1,他的super就是根mod,也就等于crate mod;
所以上面那句话可以写成use mod1::super::mod1::xx; 是等价的。
总的来说,crate是一个绝对路径,而super是一个相对路径。

作者 gengfanbin 2021-10-12 15:23

--
👇
gengfanbin: 感谢,但是并没有解决我的疑惑,这里不能发截图,我的疑惑是为什么同一文件目录下的文件引用却要使用不同的方式,而我并不知道在什么情况下该使用什么,明明都是一个目录下,为何会不同?重点在producer.rs文件和subscriber.rs文件的第一行的区别

👇
Freddie Mercury: 可以看下下面这个文章

http://www.sheshbabu.com/posts/rust-module-system/

--
👇
gengfanbin: 嗯,大佬, 道理我都懂 -.-!!!,但是你看我上面那个回复里的案例, 我不清楚为什么在同一级别中两个不同的文件引入的方式不一样, 没搞懂因为什么, 是我漏掉了什么吗?

--
👇
Aya0wind: 一个crate是一颗树,里面每一个mod都是这棵树的子节点。
crate关键字特指这棵树的根节点,也就是main.rs或者lib.rs所在的mod,也就是根mod。
比如use crate::mod1::xx,就是在当前mod中导入根节点下面一个叫mod1的子节点的mod里的内容xx;
而super指的是当前mod的父mod,比如上面说到的mod1,他的super就是根mod,也就等于crate mod;
所以上面那句话可以写成use mod1::super::mod1::xx; 是等价的。
总的来说,crate是一个绝对路径,而super是一个相对路径。

作者 gengfanbin 2021-10-12 15:12

感谢大佬

--
👇
Freddie Mercury: 可以看下下面这个文章

http://www.sheshbabu.com/posts/rust-module-system/

--
👇
gengfanbin: 嗯,大佬, 道理我都懂 -.-!!!,但是你看我上面那个回复里的案例, 我不清楚为什么在同一级别中两个不同的文件引入的方式不一样, 没搞懂因为什么, 是我漏掉了什么吗?

--
👇
Aya0wind: 一个crate是一颗树,里面每一个mod都是这棵树的子节点。
crate关键字特指这棵树的根节点,也就是main.rs或者lib.rs所在的mod,也就是根mod。
比如use crate::mod1::xx,就是在当前mod中导入根节点下面一个叫mod1的子节点的mod里的内容xx;
而super指的是当前mod的父mod,比如上面说到的mod1,他的super就是根mod,也就等于crate mod;
所以上面那句话可以写成use mod1::super::mod1::xx; 是等价的。
总的来说,crate是一个绝对路径,而super是一个相对路径。

Freddie Mercury 2021-10-08 14:05

可以看下下面这个文章

http://www.sheshbabu.com/posts/rust-module-system/

--
👇
gengfanbin: 嗯,大佬, 道理我都懂 -.-!!!,但是你看我上面那个回复里的案例, 我不清楚为什么在同一级别中两个不同的文件引入的方式不一样, 没搞懂因为什么, 是我漏掉了什么吗?

--
👇
Aya0wind: 一个crate是一颗树,里面每一个mod都是这棵树的子节点。
crate关键字特指这棵树的根节点,也就是main.rs或者lib.rs所在的mod,也就是根mod。
比如use crate::mod1::xx,就是在当前mod中导入根节点下面一个叫mod1的子节点的mod里的内容xx;
而super指的是当前mod的父mod,比如上面说到的mod1,他的super就是根mod,也就等于crate mod;
所以上面那句话可以写成use mod1::super::mod1::xx; 是等价的。
总的来说,crate是一个绝对路径,而super是一个相对路径。

作者 gengfanbin 2021-10-04 09:02

嗯,大佬, 道理我都懂 -.-!!!,但是你看我上面那个回复里的案例, 我不清楚为什么在同一级别中两个不同的文件引入的方式不一样, 没搞懂因为什么, 是我漏掉了什么吗?

--
👇
Aya0wind: 一个crate是一颗树,里面每一个mod都是这棵树的子节点。
crate关键字特指这棵树的根节点,也就是main.rs或者lib.rs所在的mod,也就是根mod。
比如use crate::mod1::xx,就是在当前mod中导入根节点下面一个叫mod1的子节点的mod里的内容xx;
而super指的是当前mod的父mod,比如上面说到的mod1,他的super就是根mod,也就等于crate mod;
所以上面那句话可以写成use mod1::super::mod1::xx; 是等价的。
总的来说,crate是一个绝对路径,而super是一个相对路径。

作者 gengfanbin 2021-10-04 08:48

项目是开源的yew框架, 地址 https://gitee.com/mirrors/Yew/tree/master/examples/pub_sub 我是一个前端,在学习rust,感觉从前端框架下手能顺利些,边看开源代码边试着写些练手的demo,这个包的使用给我搞懵了, 按照文档的说法, super相当于当前mod的父级mod, 但是这里引入的是同级别的啊.然后我把super换成crate,不出意外的报错了.说找不到,然而他们三个不是在同一级的么,为什么在producer.rs要使用crate, 在subscriber.rs中却要使用 super?

--
👇
苦瓜小仔: 你没有给项目/代码链接,我也不想去查哪个文件。

所以这里只简单解释一下:

  1. mod event_bus; 是申明一个 event_bus 的模块
  2. use crate::event_bus 是使用 lib.rs 或 main.rs 下的 item
  3. use super::event_bus 是使用上级模块名叫 event_bus 的 item
Aya0wind 2021-09-30 18:59

一个crate是一颗树,里面每一个mod都是这棵树的子节点。
crate关键字特指这棵树的根节点,也就是main.rs或者lib.rs所在的mod,也就是根mod。
比如use crate::mod1::xx,就是在当前mod中导入根节点下面一个叫mod1的子节点的mod里的内容xx;
而super指的是当前mod的父mod,比如上面说到的mod1,他的super就是根mod,也就等于crate mod;
所以上面那句话可以写成use mod1::super::mod1::xx; 是等价的。
总的来说,crate是一个绝对路径,而super是一个相对路径。

苦瓜小仔 2021-09-30 18:39

你没有给项目/代码链接,我也不想去查哪个文件。

所以这里只简单解释一下:

  1. mod event_bus; 是申明一个 event_bus 的模块
  2. use crate::event_bus 是使用 lib.rs 或 main.rs 下的 item
  3. use super::event_bus 是使用上级模块名叫 event_bus 的 item
1 共 8 条评论, 1 页