翻譯未涵蓋全部內容。完整技術參考請查閱英文原文。 睇英文版 →

特性

通过特性声明和实现定义跨类型共享行为。

特性

特性定义了多个类型可以实施的共享接口。它们是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中的方法签名与特性声明相匹配。
  • 调用站点上的特性界限由具体类型满足。

当前状态

特性声明、实现和简单的界限由当前解析器和类型检查器支持。更高级的功能(关联类型、默认方法、特性继承)在特性状态页面上跟踪。