讲动人的故事,写懂人的代码
2.3.9 类型的关联函数:简化对象创建和初始化
席双嘉:“那个String::new()
,毫无疑问,它确实像C++中的静态成员函数。”
贾克强:“哈哈!是的,两个冒号确实让人联想到一些东西,对吧?”
“这其实是Rust中的关联函数(associated function,详见第5章),也就是说,是实现于某个类型上的函数。关联函数通常用于提供对象的创建和初始化方法,例如 Rust 标准库中的 new
函数。使用关联函数可以使对象的创建过程更为直观和一致。比如String
类型上的new
函数,我们可以通过::
语法(如String::new
)来调用它,从而创建一个新的空字符串。你会发现,许多类型都有一个new
函数,因为new
是一个常用于创建新值的函数名称。”
赵可菲:“看起来Rust的关联函数是直接在类型上实现的,那么这其实和Java中的静态方法有点像呢。”
艾极思整理了大家在课堂上讨论的关联函数的相关内容。
类型的函数 | Rust | Java | C++ |
---|---|---|---|
实现方式 | 关联函数 | 静态方法 | 静态成员函数 |
调用语法 | Type::function | Class.method | Class::method |
示例 | String::new() | StringExample.newString() | StringExample::newString() |
new函数的常见用途 | 创建类型的新值 | 创建或初始化类的实例 | 创建或初始化类的实例 |
2.3.10 终端标准输入句柄:方便读取用户输入
在课堂上,有位好奇的同学提出了一个问题,他想要对比一下三种语言实现终端标准输入句柄类型的差异。大家讨论之后,艾极思用表格把大家的想法做了一个记录。
终端标准输入句柄类型 | Rust (std::io::Stdin) | Java (System.in) | C++ (std::cin) |
---|---|---|---|
类型 | std::io::Stdin | InputStream | istream |
获取输入的方法 | stdin().read_line(&mut buffer) | Scanner scanner |