fn insert(mut self, url_rule: &str) {
let mut current = self.clone(); // 作为游标指针使用,好像没有达到游标的效果
let list = parse_path(url_rule);
for word in &list {
let mut is_exist = false;
for n in current.child() {
if n.name == word.to_string() {
is_exist = true;
current = n.clone();
break;
}
}
if is_exist {
continue;
}
let mut node = Tree::new(word);
if is_variable(word) {
node.is_variable = true
};
current.append_child(&node);
current = node.clone()
}
current.rule = url_rule.to_string();
current.is_end = true;
}
上面的current游标我应该用什么类型指针,因为是自定义类型Tree,绑定只能用Clone。怎么用引用指针修改子节点的数据 golang的实现在https://github.com/obity/pretree/blob/main/pretree.go这个是没有问题的。rust实在是不会写。
Ext Link: https://github.com/code-translation/pretree/blob/main/src/pretree.rs
1
共 5 条评论, 1 页
评论区
写评论感谢大神,继续学习。我就是看了官方文档没看明白,所以实际操作试试。
--
👇
Cupnfish: 给你提了PR了,简单来说就是加了Option来避免不必要的&mut引用,同时去掉了一堆没必要的Clone,建议看看官方文档,这部分涉及所有权,是Rust的精髓,不理解的话,很容易对Rust产生厌恶心理的,影响学习这门语言。。。
给你提了PR了,简单来说就是加了Option来避免不必要的&mut引用,同时去掉了一堆没必要的Clone,建议看看官方文档,这部分涉及所有权,是Rust的精髓,不理解的话,很容易对Rust产生厌恶心理的,影响学习这门语言。。。
不考虑并发写的问题,确定RefCell指针可以指向子节点并修改对应的数据。我之前试过了没成功。
--
👇
Shieber: 似乎需要 RefCell,而且还要考虑是否并发 insert 的问题,具体有请苦瓜小仔来解答,哈哈哈!
似乎需要 RefCell,而且还要考虑是否并发 insert 的问题,具体有请苦瓜小仔来解答,哈哈哈!
哪位大神帮忙改写一下,万分感谢。已经写了单元测试 改了程序直接 Cargo test 就可以验证