起步
此文基本算是 《Don’t use boxed trait objects》 的中译,但又不全是 《Don’t use boxed trait objects》 的中译。
什么是 boxed trait 对象 ?
通常来说,rust 中的 trait 类似于 go 里的 interface —— 一个存放 n(n>=0 ) 个方法的集合,而 go 借助 interface 这一概念,很容易实现“多态”的效果。
看一个 golang 版本的“小鸟飞”示例:
package main
import (
"flag"
"fmt"
)
type Bird interface {
fly()
}
// Woodpecker 啄木鸟
type Woodpecker struct {
}
func (Woodpecker) fly() {
fmt.Println("啄木鸟 在飞...")
}
// Cuckoo 杜鹃鸟
type Cuckoo struct {
}
func (Cuckoo) fly() {
fmt.Println("杜鹃鸟 在飞...")
}
func GetOneKindBirdByName(name string) Bird {
// 这里返回的是 Bird interface
switch name {
case "woodpecker":
re