我可以别名完全限定的语法吗?

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 应该处理这种情况)。

She*_*ter 3

不,没有办法为完全限定语法添加别名。这样做对我来说没有意义,因为这种语法的重点是完全明确。


所有这些都假设您实际上需要完全限定的语法。顾名思义,通常有更简短的代码编写方式。如果范围内没有其他特征定义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)

也可以看看: