Rust 学习笔记:关于 OOP 和 trait 对象的练习题
Rust 学习笔记:关于 OOP 和 trait 对象的练习题
参考视频:
- https://www.bilibili.com/video/BV1LsdGY6E7H
问题一
以下哪一项是 Rust 实现的面向对象特性?
A. 继承父类的方法
B. 带有方法的对象
C. 私有数据的封装
答:B、C。
问题二
以下代码能否通过编译?若能,输出是?
use std::fmt::Debug;
fn main() {
let n = 1;
let s = String::from("Hello");
let v: Vec<&dyn Debug> = vec![&n, &s];
let n_ref = v[0] as &i32;
println!("{}", n_ref + 1);
}
答:不能通过编译。
报错:
问题三
考虑以下两种实现泛型函数的方式:
fn f_opt1<T: SomeTrait>(t: &T) {}
fn f_opt2(t: &dyn SomeTrait) {}
在大多数情况下,以下哪些是偏好选择 trait 对象版本 f_opt2 的理由?
A. 更高的运行时性能
B. 更快的编译速度
C. 更小的二进制体积
D. 更好的开发体验
答:B、C。