特性
通过特性声明和实现定义跨类型共享行为。
特性
特性定义了多个类型可以实施的共享接口。它们是Sounio的受限多态机制——一个函数可以要求其类型参数实现特定的特性。
声明特性
trait Printable {
fn to_string(self) -> str
}
trait Measurable {
fn magnitude(self) -> f64
}
实现特性
struct Point { x: f64, y: f64 }
impl Printable for Point {
fn to_string(self) -> str {
format("({}, {})", self.x, self.y)
}
}
impl Measurable for Point {
fn magnitude(self) -> f64 {
sqrt(self.x * self.x + self.y * self.y)
}
}
特性界限
使用特性界限约束泛型类型参数:
fn display<T: Printable>(value: T) with IO {
println(value.to_string())
}
fn compare_magnitudes<T: Measurable>(a: T, b: T) -> bool {
a.magnitude() > b.magnitude()
}
特性检查的位置
特性的解析在self-hosted/check/traits.sio中实现。检查器验证:
- 每个
impl块都提供了所有必需的方法。 impl中的方法签名与特性声明相匹配。- 调用站点上的特性界限由具体类型满足。
当前状态
特性声明、实现和简单的界限由当前解析器和类型检查器支持。更高级的功能(关联类型、默认方法、特性继承)在特性状态页面上跟踪。