Rust 学习笔记:关于 Trait 的练习题

Rust 学习笔记:关于 Trait 的练习题

以下代码能否通过编译?若能,输出是?

trait MakeNoice {
    fn make_noice(&self) {
        println!("(silence)");
    }
}

struct Dog {}
struct Cat {}

impl MakeNoice for Dog {
    fn make_noice(&self) {
        println!("bark");
    }
}

impl MakeNoice for Cat {}

fn main() {
    let dog = Dog {};
    dog.make_noice();
    let cat = Cat {};
    cat.make_noice();
}

答:可以通过编译。

输出:

bark
(silence)

以下是关于 Rust 允许哪些类型的 trait 实现的说法。请选择正确的陈述。

A. 你可以为外部类型实现本地 trait
B. 你可以为外部类型实现外部 trait
C. 你可以为本地类型实现本地 trait
D. 你可以为本地类型实现外部 trait

答:A、C、D。

以下代码能否通过编译?若能,输出是?

use std::fmt::Display;

fn displayable<T: Display>(t: T) -> impl Display {
    t
}

fn main() {
    let s = String::from("hello");
    let mut s2 = displayable(s);
    s2.push_str(", world!");
    println!("{s2}");
}

答:不能通过编译。因为函数返回值只确保 s2 实现了 Display trait,Display 没有 push_str 方法。

在这里插入图片描述

要使以下函数通过类型检查,对 T 需要的最小 trait 约束是什么?

fn f<T: /* ??? */>(t: &T) {
	let t2 = t.clone();
	println!("{t2}");
}

答:Clone + Display。

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包

打赏作者

UestcXiye

你的鼓励将是我创作的最大动力

¥1 ¥2 ¥4 ¥6 ¥10 ¥20
扫码支付:¥1
获取中
扫码支付

您的余额不足,请更换扫码支付或充值

打赏作者

实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值