При написании кода с признаками вы можете поместить признак в привязку к значению:
use std::fmt::Debug;
fn myfunction1<T: Debug>(v: Box<T>) {
println!("{:?}", v);
}
fn myfunction2<T: Debug>(v: &T) {
println!("{:?}", v);
}
fn main() {
myfunction1(Box::new(5));
myfunction2(&5);
}
Или непосредственно в Box
или ссылочном типе:
use std::fmt::Debug;
fn myfunction3(v: Box<Debug>) {
println!("{:?}", v);
}
fn myfunction4(v: &Debug) {
println!("{:?}", v);
}
fn main() {
myfunction3(Box::new(5));
myfunction4(&5);
}
Они дают тот же результат. Так в чем же разница?
(Этот вопрос был вдохновлен другим вопросом, где это было всего лишь одной из нескольких взаимосвязанных концепций)