use*_*r89 5 syntax rust type-alias
我有一些代码,其中有许多完全限定语法的实例;举个例子:
mod hal {
pub trait Backend {
type Device;
}
}
mod back {
pub struct Backend {}
impl ::hal::Backend for Backend {
type Device = i32;
}
}
fn main() {
let d: back::Backend::Device = 0;
}
Run Code Online (Sandbox Code Playgroud)
为了避免错误,例如:
mod hal {
pub trait Backend {
type Device;
}
}
mod back {
pub struct Backend {}
impl ::hal::Backend for Backend {
type Device = i32;
}
}
fn main() {
let d: back::Backend::Device = 0;
}
Run Code Online (Sandbox Code Playgroud)
有什么好的方法可以让我别名SomeType as SomeTrait吗?然后,只要需要这个完全限定语法的实例,我就可以写:
<S>::associated_fn(...)
请注意,此错误不会发生,因为实际上某些特征的定义有多个实现(根据The Rust Programming Language,FQS 应该处理这种情况)。
不,没有办法为完全限定语法添加别名。这样做对我来说没有意义,因为这种语法的重点是完全明确。
所有这些都假设您实际上需要完全限定的语法。顾名思义,通常有更简短的代码编写方式。如果范围内没有其他特征定义to_string并且类型本身没有实现同名的方法,那么这些都是等效的:
<i32 as ToString>::to_string(&42);
Run Code Online (Sandbox Code Playgroud)
ToString::to_string(&42);
Run Code Online (Sandbox Code Playgroud)
i32::to_string(&42);
Run Code Online (Sandbox Code Playgroud)
42.to_string();
Run Code Online (Sandbox Code Playgroud)
也可以看看:
| 归档时间: |
|
| 查看次数: |
1791 次 |
| 最近记录: |