Rust 特性2024 年 8 月 29 日 | 阅读 6 分钟
trait 的语法 在上述情况下,我们声明特性,然后是特性名称。在花括号内,声明方法签名以描述实现该特性的类型的行为。 让我们看一个简单的例子 输出 Area of a triangle is 91.35 在上面的例子中,声明了一个名为 HasArea 的特性,其中包含 area() 函数的声明。 HasArea 在 Triangle 类型上实现。 area() 函数只需使用该结构的实例即可调用,即 a.area()。 特性作为参数特性也可以用作许多不同类型的参数。 上面的例子实现了 HasArea 特性,并且它包含 area() 函数的定义。我们可以定义 calculate_area() 函数来调用 area() 函数,而 area() 函数是使用实现 HasArea 特性的类型的实例来调用的。 让我们看一下语法 通用函数上的特性边界特性很有用,因为它们描述了不同方法的行为。但是,通用函数不遵循此约束。 **让我们通过一个简单的场景来理解这一点:** 在上述情况下,Rust 编译器抛出一个“类型 T 中未找到名为的错误”。如果我们将特性绑定到通用 T,则可以克服以下错误 在上述情况下,<T: HasArea> 意味着“T 可以是任何实现 HasArea 特性的类型”。 Rust 编译器了解到任何实现 HasArea 特性的类型都将具有 area() 函数。 让我们看一个简单的例子 输出 Area is : 91.35 Area is : 20.25 在上面的例子中,calculate_area() 函数是通用的,超过“T”。 实现特性的规则实现特性有两个限制
让我们看一个简单的例子 输出 error : no method named 'write' found. let result = f.write(str); **在上述情况下,Rust 编译器抛出一个错误,即“未找到名为“write”的方法”,因为** use::std::fs::File; 命名空间不包含 write() 方法。因此,我们需要**使用 Write 特性来删除编译错误**。
多个特性边界
如果要绑定多个特性,则使用 + 运算符。 让我们看一个简单的例子 输出 Debug: ' "javaTpoint"' Display: ' javaTpoint' 在上面的例子中,Display 和 Debug 特性通过使用 '+' 运算符绑定到类型 'T'。
让我们来看看 当在上述情况下使用 'where' 时 在上述情况下,我们使用 'where' 子句的第二种情况使程序更具表现力和可读性。 让我们看一个简单的例子 输出 Perimeter of a square is 24.8 Perimeter of a rectangle is 17.6 默认方法如果方法的定义已知,则可以将默认方法添加到特性定义中。 让我们来看看 在上述情况下,将默认行为添加到特性定义中。我们也可以覆盖默认行为。**让我们通过一个例子来看一下这种情况:** 输出 Value of a is : 5 Value of b is : 7 在上面的例子中,在特性中定义的 b() 函数的行为被覆盖。因此,我们可以得出结论,我们可以覆盖在特性中定义的方法。 继承从另一个特性派生的特性称为继承。有时,实现需要实现另一个特性的特性是必需的。如果要从 'A' 特性派生 'B' 特性,则看起来像 让我们看一个简单的例子 输出 javaTpoint tutorial 在上面的例子中,我们的程序正在实现 'B' 特性。因此,它也需要实现 'A' 特性。如果我们的程序没有实现 'A' 特性,那么 Rust 编译器会抛出一个错误。 下一主题# |
我们请求您订阅我们的新闻通讯以获取最新更新。