去版本:1.18
这是一个不是特别有用的愚蠢示例。我将其用作学习泛型的练习。
我有一个Pokemon界面
type Pokemon interface {
ReceiveDamage(float64)
InflictDamage(Pokemon)
}
并Charmander带有实现Pokemon接口的类型参数。
type Float interface {
float32 | float64
}
type Charmander[F Float] struct {
Health F
AttackPower F
}
我想用Charmander的攻击力造成伤害。
func (c *Charmander[float64]) ReceiveDamage(damage float64) {
c.Health -= damage
}
func (c *Charmander[float64]) InflictDamage(other Pokemon) {
other.ReceiveDamage(c.AttackPower)
}
我的编译器报错
不能将 c.AttackPower(受 Float 约束的 float64 类型变量)用作 other.ReceiveDamage 编译器(IncompatibleAssign)参数中的 float64 值
我已经将 struct generic 实例化为*Charmander[float64]. 我希望编译器知道AttackPower是一个float64.
当我将 a 传递给float64期望为 的函数时,float64它为什么要抱怨?另一方面,ReceiveDamage不抱怨。我float64从中减去 aHealth是一个受约束的类型。
海绵宝宝撒