|
|
@ -114,7 +114,7 @@ help: consider restricting type parameter `T`
|
|
|
|
| +++++++++++++++++++++++++++
|
|
|
|
| +++++++++++++++++++++++++++
|
|
|
|
```
|
|
|
|
```
|
|
|
|
|
|
|
|
|
|
|
|
同样的,不是所有`T`类型都能进行相加操作,因此我们需要用`std::ops::Add<Output = T>`对T进行限制:
|
|
|
|
同样的,不是所有 `T` 类型都能进行相加操作,因此我们需要用 `std::ops::Add<Output = T>` 对 `T` 进行限制:
|
|
|
|
```rust
|
|
|
|
```rust
|
|
|
|
fn add<T: std::ops::Add<Output = T>>(a:T, b:T) -> T {
|
|
|
|
fn add<T: std::ops::Add<Output = T>>(a:T, b:T) -> T {
|
|
|
|
a + b
|
|
|
|
a + b
|
|
|
@ -187,7 +187,7 @@ enum Option<T> {
|
|
|
|
}
|
|
|
|
}
|
|
|
|
```
|
|
|
|
```
|
|
|
|
|
|
|
|
|
|
|
|
`Option<T>` 是一个拥有泛型 `T`,它第一个成员是 `Some(T)`,存放了一个类型为`T`的值。得益于泛型的引入,我们可以在任何一个需要返回值的函数中,去使用 `Option<T>` 枚举类型来做为返回值,用于返回一个任意类型的值 `Some(T)`,或者没有值 `None`。
|
|
|
|
`Option<T>` 是一个拥有泛型 `T` 的枚举类型,它第一个成员是 `Some(T)`,存放了一个类型为 `T` 的值。得益于泛型的引入,我们可以在任何一个需要返回值的函数中,去使用 `Option<T>` 枚举类型来做为返回值,用于返回一个任意类型的值 `Some(T)`,或者没有值 `None`。
|
|
|
|
|
|
|
|
|
|
|
|
对于枚举而言,卧龙凤雏永远是绕不过去的存在:如果是 `Option` 是卧龙,那么 `Result` 就一定是凤雏,得两者可得天下:
|
|
|
|
对于枚举而言,卧龙凤雏永远是绕不过去的存在:如果是 `Option` 是卧龙,那么 `Result` 就一定是凤雏,得两者可得天下:
|
|
|
|
```rust
|
|
|
|
```rust
|
|
|
@ -264,7 +264,7 @@ impl Point<f32> {
|
|
|
|
```
|
|
|
|
```
|
|
|
|
这段代码意味着 `Point<f32>` 类型会有一个方法 `distance_from_origin`,而其他 `T` 不是 `f32` 类型的 `Point<T> `实例则没有定义此方法。这个方法计算点实例与坐标`(0.0, 0.0)` 之间的距离,并使用了只能用于浮点型的数学运算符。
|
|
|
|
这段代码意味着 `Point<f32>` 类型会有一个方法 `distance_from_origin`,而其他 `T` 不是 `f32` 类型的 `Point<T> `实例则没有定义此方法。这个方法计算点实例与坐标`(0.0, 0.0)` 之间的距离,并使用了只能用于浮点型的数学运算符。
|
|
|
|
|
|
|
|
|
|
|
|
这样我们就能针对特定的泛型类型实现某个特定的方法,对于其它泛型类型,该方法则并无定义。
|
|
|
|
这样我们就能针对特定的泛型类型实现某个特定的方法,对于其它泛型类型则没有定义该方法。
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
@ -369,7 +369,7 @@ where
|
|
|
|
fn main() {
|
|
|
|
fn main() {
|
|
|
|
something([0u8; 0]); // ok
|
|
|
|
something([0u8; 0]); // ok
|
|
|
|
something([0u8; 512]); // ok
|
|
|
|
something([0u8; 512]); // ok
|
|
|
|
something([0u8; 1024]); // 编译错误,数组长度是1024自己,超过了768字节的参数长度限制
|
|
|
|
something([0u8; 1024]); // 编译错误,数组长度是1024字节,超过了768字节的参数长度限制
|
|
|
|
}
|
|
|
|
}
|
|
|
|
|
|
|
|
|
|
|
|
// ---
|
|
|
|
// ---
|
|
|
|