Replies: 79 comments 106 replies
-
这章的爬坡陡度太高了,可能是基础知识还是没掌握 |
Beta Was this translation helpful? Give feedback.
-
后面会对生命周期两个章节进行下大幅优化,目前确实存在一些问题 |
Beta Was this translation helpful? Give feedback.
-
最后的这个例子中的错误实在是...太反直觉了。 |
Beta Was this translation helpful? Give feedback.
-
&*self 是为什么, 不能是&self呢 |
Beta Was this translation helpful? Give feedback.
-
看前:我是新手,就是想头铁 0 0 |
Beta Was this translation helpful? Give feedback.
-
建议加入Variance相关的知识点,目前的内容貌似没有cover这块难点 |
Beta Was this translation helpful? Give feedback.
-
&self &Self &*self self 啥区别啊,越看越蒙😒 |
Beta Was this translation helpful? Give feedback.
-
无语感觉自己在看天书了。。。太玄幻了 |
Beta Was this translation helpful? Give feedback.
-
写的很通俗易懂!飞哥🐂🍺 |
Beta Was this translation helpful? Give feedback.
-
大佬,针对例2的情况怎么解决那? |
Beta Was this translation helpful? Give feedback.
-
关于再借用
这是可以运行的。 我理解是: 理解的对吗? |
Beta Was this translation helpful? Give feedback.
-
rustc 1.61.0 第一个例子可以了 |
Beta Was this translation helpful? Give feedback.
-
都说学rust是陡坡,感觉形容悬崖更合适。 |
Beta Was this translation helpful? Give feedback.
-
真复杂。好难懂。 |
Beta Was this translation helpful? Give feedback.
-
太难了,烧脑,结果还烧糊了 |
Beta Was this translation helpful? Give feedback.
-
对于这本书的定位以及平缓学习曲线的初衷来讲,这一章不是很好,尤其是第二个例子。如果不行我觉得可以删掉这一章,让初学者遇到的时候再去研究也好。 |
Beta Was this translation helpful? Give feedback.
-
这文章过时了,好多编译器已经解决了 |
Beta Was this translation helpful? Give feedback.
-
foo.mutate_and_share()这里编译器显示就是进行了可变借用,然后foo.share()这里进行了不可变借用,所以后面再通过println!("{:?}", loan)使用可变借用失败了.不是"理论上来说它最终是进行了不可变借用",在&mut self这里就已经发生了 |
Beta Was this translation helpful? Give feedback.
-
虽然我现在看懂了你的书,但是我还是不认为你的书是一本可以面向非cpp的人看的书,我拥有丰富的go开发经验,但前2年看你的书时候,还是对这些概念非常陌生,也无法得到你的真传,直到最近突然开窍,回来重新看你的书,才看懂了你表达的意思,之前看了你很多章节,朦朦胧胧的,有点懂,又好像不是很懂,似懂非懂,所以,我还是不推荐这本书作为入门书籍,无论如何,官网的书籍和rust程序设计,以及众多的公众号网文还是比你这本书浅显易懂的!不过还是非常感谢你,因为你这本书是适合已经看完“官网的书籍和rust程序设计,以及众多的公众号网文”的人,但是真的不是很适合小白或者go开发者 |
Beta Was this translation helpful? Give feedback.
-
我沒有看明白第一個例子。假如代碼是這樣的 #[derive(Debug)]
struct Foo{
x:i32
}
impl Foo {
fn mutate_and_share(&mut self) -> &Self {
self.x = 20;
&*self
}
fn share(&self) {}
}
fn main() {
let mut foo = Foo{x:10};
let loan = foo.mutate_and_share();
// foo.share();
println!("{:?}", loan);
} 不能說因爲返回的是&Self所以就是不可變引用吧?因爲上面loan的值就是被修改了的。把一個&mut self傳進函數如果當成不可變引用反而會很不安全吧 |
Beta Was this translation helpful? Give feedback.
-
最后一个例子并不需要写的这么麻烦,下面的代码也同样会出现这个问题,而且可以看到即使没有方法,也会出现同样的报错,说明这个报错跟impl的注解没有关系 |
Beta Was this translation helpful? Give feedback.
-
最后是看明白了,但让我自己写根本写不出来 |
Beta Was this translation helpful? Give feedback.
-
闭包的生命周期还有其他解决办法:
本质是约束闭包不能捕获引用,上述语句在编译的时候会被编译器添加上'static约束:
这篇文章中的办法也是一样,实际是下面的形式:
|
Beta Was this translation helpful? Give feedback.
-
第一个例子编译器的做法是对的,考虑如下代码。
虽然 |
Beta Was this translation helpful? Give feedback.
-
我想挑战一下我的软肋 |
Beta Was this translation helpful? Give feedback.
-
个人认为,作者最后一个例子出错的原因是,返回参数Interface和输入参数&'a mut self的生命周期是一样的,list用到了最后,所以返回参数Interface也活到了最后,所以Interface一直到最后到保持了对self.manager的可变引用,所以才会说可变引用和不可变引用同时存在的作用。和作者说的“而 List 的生命周期也是 'a,说明该方法至少活得跟 List 一样久”,我感觉是没有关系的 |
Beta Was this translation helpful? Give feedback.
-
闭包函数的消除规则那的 |
Beta Was this translation helpful? Give feedback.
-
不知道对于最后一个例子的想法对不对,这里方法其实也可以看成一个引用吧(方法不就是一个指针吗,引用也是一个指针。。。。)? |
Beta Was this translation helpful? Give feedback.
-
我理解第一个例子报错的原因在于之前在2.2.3章节中说到的:引用必须总是有效的。所以在loan这个变量存在过程中,还需要使用到&mut self,最终导致了报错。哪怕方法已经调用完成,但是借用还存在,和可变借用存在关联。这也和编译器报错内容符合。编辑器在12行报不可变借用发生在这里,13行报可变借用之后在这里使用。 ============================================================================= 我写了一个简化版的,内容如下,报错和上面作者的报错基本一致。 fn main() { let loan = &mut foo; println!("{:?}",foo); println!("{:?}", loan); 如有错误希望大家可以指出,非常感谢。 |
Beta Was this translation helpful? Give feedback.
-
https://course.rs/advance/lifetime/advance.html
Beta Was this translation helpful? Give feedback.
All reactions