杂
关于 trait bounds
pub fn notify(item: &impl Summary) {
println!("Breaking news! {}", item.summarize());
}
这个是下方的糖:
pub fn notify<T: Summary>(item: &T) {
println!("Breaking news! {}", item.summarize());
}
关于闭包有关的 trait
FnOnce适用于只能被调用一次的闭包。所有闭包至少都实现了这个 trait,因为所有闭包都能被调用。一个会将捕获的值从闭包体中移出的闭包只会实现FnOncetrait,而不会实现其他Fn相关的 trait,因为它只能被调用一次。FnMut适用于不会将捕获的值移出闭包体,但可能会修改捕获值的闭包。这类闭包可以被调用多次。Fn适用于既不将捕获的值移出闭包体,也不修改捕获值的闭包,同时也包括不从环境中捕获任何值的闭包。这类闭包可以被多次调用而不会改变其环境,这在会多次并发调用闭包的场景中十分重要。