相关疑难解决方法(0)

我什么时候应该实现std :: convert :: From vs std :: convert :: Into?

我看到它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,但我没有看到它们.

rust

33
推荐指数
1
解决办法
5034
查看次数

为newtypes实现Deref被认为是一种不好的做法吗?

我经常使用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)

这是一种好的还是坏的做法?为什么?可能是什么缺点?

dereference rust

24
推荐指数
2
解决办法
2542
查看次数

如何在自定义类型上实现 fmt::Display?

我有这个自定义类型:

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)

那么为什么我会收到编译错误呢?

rust

3
推荐指数
1
解决办法
391
查看次数

标签 统计

rust ×3

dereference ×1