小编dor*_*asu的帖子

所有权:Rust 中元组和数组的区别

我开始学习 Rust,在进行实验时,我发现所有权如何应用于我不理解的元组和数组的方式有所不同。基本上,以下代码显示了差异:

#![allow(unused_variables)]

struct Inner {
    in_a: u8,
    in_b: u8
}
struct Outer1 {
    a: [Inner; 2]
}

struct Outer2 {
    a: (Inner, Inner)
}

fn test_ownership(num: &mut u8, inner: &Inner) {
}

fn main() {
    let mut out1 = Outer1 {
        a: [Inner {in_a: 1, in_b: 2}, Inner {in_a: 3, in_b: 4}]
    };
    let mut out2 = Outer2 {
        a: (Inner {in_a: 1, in_b: 2}, Inner {in_a: 3, in_b: 4})
    };

    // This fails to compile
    test_ownership(&mut out1.a[0].in_a, &out1.a[1]); …
Run Code Online (Sandbox Code Playgroud)

rust

7
推荐指数
1
解决办法
252
查看次数

我怎样才能对这个 Rust 特征使用相同的默认实现

我想实现一个允许分配泛型类型的特征。到目前为止,我已经测试了以下u32类型String

trait Test {
    fn test(&self, input: &str) -> Self;
}

impl Test for String {
    fn test(&self, input: &str) -> Self {
        input.parse().unwrap()
    }
}

impl Test for u32 {
    fn test(&self, input: &str) -> Self {
        input.parse().unwrap()
    }
}

fn main() {
    let mut var = 0u32;
    let mut st = String::default();

    var = var.test("12345678");
    st = st.test("Text");
    println!("{}, {}", var, st);
}
Run Code Online (Sandbox Code Playgroud)

我知道这段代码并不完美,我应该使用Result返回而不是展开,但请将其放在一边,因为这是一个简单的示例。u32和 的实现String完全相同,因此我想对两者使用默认实现,而不是复制和粘贴代码。我尝试过使用其中之一,但由于Self两者返回的类型不同,编译器无法确定类型大小和错误。

在这种情况下我该如何编写默认实现?

methods default traits rust

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

标签 统计

rust ×2

default ×1

methods ×1

traits ×1