我看到它std::convert::Into有一个实现任何实现的东西std::convert::From:
impl<T, U> Into<U> for T where U: From<T>
Run Code Online (Sandbox Code Playgroud)
有更具体的实现From,虽然Into目前只有3个特定的实现,这使得它似乎是From默认实现的主流决定.我确信有些时候我只想实现Into而不是From,但我没有看到它们.
我经常使用newtype模式,但我厌倦了写作my_type.0.call_to_whatever(...).我很想实现这个Deref特性,因为它允许编写更简单的代码,因为我可以使用我的newtype,好像它在某些情况下是底层类型,例如:
use std::ops::Deref;
type Underlying = [i32; 256];
struct MyArray(Underlying);
impl Deref for MyArray {
type Target = Underlying;
fn deref(&self) -> &Self::Target {
&self.0
}
}
fn main() {
let my_array = MyArray([0; 256]);
println!("{}", my_array[0]); // I can use my_array just like a regular array
}
Run Code Online (Sandbox Code Playgroud)
这是一种好的还是坏的做法?为什么?可能是什么缺点?
我有这个自定义类型:
pub type Address = [u8; 32];
Run Code Online (Sandbox Code Playgroud)
我尝试fmt::Display为这种类型实现:
impl fmt::Display for Address {
fn fmt(&self, f: &mut fmt::Formatter) -> fmt::Result {
let public_key = sr25519::Public::from_raw(self);
let address = public_key.to_ss58check();
write!(f,"{}",address)
}
}
Run Code Online (Sandbox Code Playgroud)
但我得到这个编译错误:
pub type Address = [u8; 32];
Run Code Online (Sandbox Code Playgroud)
我知道要实现一个特征,我需要有两个之一:type本地的定义或本地的定义trait。
好吧,我已经在本地定义了类型:
pub type Address = [u8; 32];
Run Code Online (Sandbox Code Playgroud)
那么为什么我会收到编译错误呢?