【发布时间】:2021-08-18 19:03:22
【问题描述】:
所以我有两个文件 main.rs 和 utils.rs
我在 utils.rs 上实现了 StringUtils 方法,但是当我尝试在 main.rs 中使用该方法时 它给了我这个错误
错误[E0599]:在当前范围内没有找到用于引用 `&str` 的名为 `slice` 的方法
--> src\main.rs:89:50
|
89 |让文本: String = self.inner.clone().as_str().slice(self.start, self.current);
| ^^^^^ 在 `&str` 中找不到方法
|
=帮助:只有在实现了特征并且在范围内时才能使用特征中的项目
注意:`StringUtils`定义了一个`slice`项,也许你需要实现它
--> src\util.rs:25:1
|
25 |特征 StringUtils {
| ^^^^^^^^^^^^^^^^^
// main.rs
mod utils;
use utils::*;
...
fn add_token0(&mut self, token_type: TokenType) {
let text: String = self.inner.clone().as_str().slice(self.start, self.current);
// error: no method named `slice` found for reference `&str` in the current scope
}
...
但我已经在 utils.rs 上实现了它
// utils.rs
...
trait StringUtils {
...
fn slice(&self, range: impl RangeBounds<usize>) -> &str;
...
}
impl StringUtils for str {
...
fn slice(&self, range: impl RangeBounds<usize>) -> &str {
...
}
...
}
...
为什么我的实现不起作用,有什么办法可以解决或者我只能在 main.rs 上实现 StringUtils?
【问题讨论】:
-
您是否打算公开
StringUtils特征(对您的 crate 或其他 crate 中的其他模块)? -
slice应该接受多少个参数?您使用 2 个参数(self和range)定义了它,但您使用 3 个参数(隐式self、self.start和self.current)调用它 -
@kopecs 是的,我在问这个问题
-
@trentcl 感谢您的提醒,尽管它仍然没有给出未找到方法的错误
标签: rust namespaces implementation