basic/trait/trait-object #685
Replies: 195 comments 140 replies
-
看到这一脸懵逼 |
Beta Was this translation helpful? Give feedback.
-
特征对象要划重点,得多温习 |
Beta Was this translation helpful? Give feedback.
-
尚未完全理解 |
Beta Was this translation helpful? Give feedback.
-
各位大佬们,怎么理解 Box动态分发,就像例子中:
这里x, y不是已知类型么,为什么不能像静态分发一样,为u8和f64分别生成一份代码 |
Beta Was this translation helpful? Give feedback.
-
fn add<T: Add<T, Output = T>>(a: T, b: T) -> T 这个 Output = T 没看懂啊 |
Beta Was this translation helpful? Give feedback.
-
最后好像没有直接给出一开始提出问题的解决方法, 是在练习里吗? |
Beta Was this translation helpful? Give feedback.
-
觉得 Box 智能指针能在本节做一个介绍,可能会更方便大家理解本节内容 |
Beta Was this translation helpful? Give feedback.
-
特征对象,有点像java的接口类型,例如Map,List。例如: List<String> list = new ArrayList<String>(); List是一个接口,ArrayList类型实现了List接口。 |
Beta Was this translation helpful? Give feedback.
-
眼睛看懂了,手还没懂。练习题都不够撸。 |
Beta Was this translation helpful? Give feedback.
-
我好像知道了什么,留下了贫穷的泪水 |
Beta Was this translation helpful? Give feedback.
-
看到这里,表示这是我学习 Rust 的第一个卡点。。 |
Beta Was this translation helpful? Give feedback.
-
特征对象可以模拟继承 |
Beta Was this translation helpful? Give feedback.
-
其实就是“多态”,在不同的语言里面有不同的名称、语法和实现方式,比如c语言就是用不安全的指针粗暴地实现,c++用虚函数来实现,java通过抽象类与接口来实现,像go,swift这种很新的语言都倾向于通过更灵活的鸭式辨型的抽象来实现多态和动态派发,go里面叫interface,swift里面叫protocol,而rust里面就叫trait |
Beta Was this translation helpful? Give feedback.
-
为自定义类型实现 + 操作 给struct Point加 :Add<T,Output =T > 和 不加 有什么区别呢? 请大佬讲解下 |
Beta Was this translation helpful? Give feedback.
-
用下标处理,就不需要 fn largest<T: PartialOrd>(list: &[T]) -> &T {
let mut largest_idx = 0_usize;
for i in 0..list.len() {
if list[i] > list[largest_idx] {
largest_idx = i;
}
}
&list[largest_idx]
} |
Beta Was this translation helpful? Give feedback.
-
Javaer 表示这不就是多态么,不过 Trait 更灵活一点 |
Beta Was this translation helpful? Give feedback.
-
特征定义了一组可以被共享的行为,只要实现了特征,你就能使用这组行为。 |
Beta Was this translation helpful? Give feedback.
-
这不就是golang里的接口吗 |
Beta Was this translation helpful? Give feedback.
-
看完有一种感觉:也许C#的接口底层就是这么做的。感觉trait就是一个非常复杂的interface,或者trait是一个很底层的interface。 |
Beta Was this translation helpful? Give feedback.
-
特征对象的限制,问ds也没有完全理解哈哈,先mark一个以后再说 |
Beta Was this translation helpful? Give feedback.
-
我以为就我觉得设计得很复杂,没想到评论区也是一脸懵 |
Beta Was this translation helpful? Give feedback.
-
1、特征相当于Java的接口,或者抽象类;2、特征中可以定义函数;3、Display特征中定义了fmt函数,用于格式化输出,相当于Java的toString方法;4、特征约束和泛型约束相当于Java的泛型约束,比如T extend XXObject;5、返回值impl T,还是类似于Java的返回T,想返回多个就封装吧 |
Beta Was this translation helpful? Give feedback.
-
真抽象啊!!! |
Beta Was this translation helpful? Give feedback.
-
前面的都能理解,其实在类似于 java 中的多态,只是因为 rust 中没有继承,导致需要特征对象作为载体(在 Java 中则是父类 or 接口),仅就动态分发这一 part而言,肯定是比 java 啰嗦一些。
假如特征 Draw 有 2 个方法 draw1 和 draw2,而我只需要用到其中的 draw1,难道也要要求 draw2 去符合对特征要求的限制吗? |
Beta Was this translation helpful? Give feedback.
-
有一些描述的语言,翻译味道比较重,不太像中国话,知识倒是还好理解。 |
Beta Was this translation helpful? Give feedback.
-
PHP终于有用一下了,泪目 |
Beta Was this translation helpful? Give feedback.
-
c++中的 concept + abstract class |
Beta Was this translation helpful? Give feedback.
-
特征对象的动态分发:
|
Beta Was this translation helpful? Give feedback.
-
函数 returns_summarizable 可以返回 summarizable 对象的方式 Rust Playground : fn returns_summarizable(switch: bool) -> Box<dyn Summary> {
if switch {
let summarizable = Post {
title: String::from(
"Penguins win the Stanley Cup Championship!",
),
author: String::from("Iceburgh"),
content: String::from(
"The Pittsburgh Penguins once again are the best \
hockey team in the NHL.",
),
};
Box::new(summarizable)
} else {
let summarizable = Weibo {
username: String::from("horse_ebooks"),
content: String::from(
"of course, as you probably already know, people",
),
};
Box::new(summarizable)
}
} |
Beta Was this translation helpful? Give feedback.
-
这玩意在swift里叫协议,我说的对吗 |
Beta Was this translation helpful? Give feedback.
Uh oh!
There was an error while loading. Please reload this page.
-
basic/trait/trait-object
https://course.rs/basic/trait/trait-object.html
Beta Was this translation helpful? Give feedback.
All reactions