没看懂他们为什么使用的关键字不一样还报错,官方文档中没找到相关解释,他们明明在同一个目录结构中.yew项目的pub_sub案例中在同一目录下有三个文件main.rs,producer.rs,subscriber.rs都使用了event_bus.rs,却分别使用了
mod event_bus;
use crate::event_bus
use super::event_bus
三种方式 看了一些解释,但解释不通啊,我尝试互换,会报错,但是只是告诉你有问题,却不知道是因为什么 有大佬帮忙解释一下三个的区别么
1
共 8 条评论, 1 页
评论区
写评论项目开源地址https://gitee.com/mirrors/Yew/tree/master/examples/pub_sub
--
👇
gengfanbin:
--
👇
gengfanbin: 感谢,但是并没有解决我的疑惑,这里不能发截图,我的疑惑是为什么同一文件目录下的文件引用却要使用不同的方式,而我并不知道在什么情况下该使用什么,明明都是一个目录下,为何会不同?重点在producer.rs文件和subscriber.rs文件的第一行的区别
👇
Freddie Mercury: 可以看下下面这个文章
--
👇
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: 感谢,但是并没有解决我的疑惑,这里不能发截图,我的疑惑是为什么同一文件目录下的文件引用却要使用不同的方式,而我并不知道在什么情况下该使用什么,明明都是一个目录下,为何会不同?重点在producer.rs文件和subscriber.rs文件的第一行的区别
👇
Freddie Mercury: 可以看下下面这个文章
--
👇
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: 可以看下下面这个文章
--
👇
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: 嗯,大佬, 道理我都懂 -.-!!!,但是你看我上面那个回复里的案例, 我不清楚为什么在同一级别中两个不同的文件引入的方式不一样, 没搞懂因为什么, 是我漏掉了什么吗?
--
👇
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是一个相对路径。
嗯,大佬, 道理我都懂 -.-!!!,但是你看我上面那个回复里的案例, 我不清楚为什么在同一级别中两个不同的文件引入的方式不一样, 没搞懂因为什么, 是我漏掉了什么吗?
--
👇
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是一个相对路径。
项目是开源的yew框架, 地址 https://gitee.com/mirrors/Yew/tree/master/examples/pub_sub 我是一个前端,在学习rust,感觉从前端框架下手能顺利些,边看开源代码边试着写些练手的demo,这个包的使用给我搞懵了, 按照文档的说法, super相当于当前mod的父级mod, 但是这里引入的是同级别的啊.然后我把super换成crate,不出意外的报错了.说找不到,然而他们三个不是在同一级的么,为什么在producer.rs要使用crate, 在subscriber.rs中却要使用 super?
--
👇
苦瓜小仔: 你没有给项目/代码链接,我也不想去查哪个文件。
所以这里只简单解释一下:
一个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是一个相对路径。
你没有给项目/代码链接,我也不想去查哪个文件。
所以这里只简单解释一下: