作者回复: 非常棒!第 1 题还可以用泛型参数进一步统一 String/&str,DRY: ```Rust impl<T> From<T> for MyString where T: AsRef<str> + Into<String>, { fn from(s: T) -> Self { match s.as_ref().len() > MINI_STRING_MAX_LEN { true => Self::Standard(s.into()), _ => Self::Inline(MiniString::new(s)), } } } ```
作者回复: 加油!对暂时理解不了的地方,可以先跳过,之后再回来阅读
作者回复: as 是 Rust 的关键字,用于做类型转换,比如: let i = 1; // i32 let u = i as usize; // usize 这里 B 有约束是 B: ToOwned,所以 B as ToOwned 是成立的,相当于把 B 转换成 ToOwned,然后因为 ToOwned 带有关联类型,所以强制转换成 ToOwend 后,引用它的关联类型 Owned。
作者回复: 对的。
作者回复: 👍
作者回复: 在线程间传递栈上的有所有权的数据会 move,所以不会有问题。
编辑回复: 恩简单说明一下前面的课程设计思路: -前置篇是编程相关的最基本概念 -基础篇是开始接触Rust,语法介绍了1讲,然后插入了get hands dirty 项目从写代码中直观感受Rust语法特性,然后就讲几个Rust的学习重难点了:所有权、生命周期、函数式编程特性、类型系统、泛型编程、错误处理等 作为“第一课”,语法讲的不是很多确实不够友好,一是课程篇幅有限,二是Rust的官方文档做的非常好,另外也有老师个人倾向觉得语法详细讲没有太大必要,毕竟再怎么样讲,也得学习者自己敲代码上手慢慢熟悉风格。 所以可能没有给你非常好的学习体验,表示抱歉。 你可以配合官方的Rust book一起使用,另外加餐中老师和几个同学也分享了自己的学习资料,祝学习愉快~
作者回复: 多谢指正!估计是代码粘到文档中的问题,我让编辑修改了。github 上的代码是正确的。
作者回复: 可以参考:https://github.com/Rust-for-Linux/linux/tree/rust/Documentation/rust
作者回复: 慢慢来,别急