小编Lar*_*äck的帖子

在生命中,我是否遗漏了一些东西?

我刚开始学习Rust,来自Java/JavaScript背景,所以请耐心等待,因为我对生命时间的理解显然缺少一些东西.

fn main() {
    struct Appearance<'a> {
        identity:       &'a u64, 
        role:           &'a str
    };
    impl<'a> PartialEq for Appearance<'a> {
        fn eq(&self, other: &Appearance) -> bool {
            self.identity == other.identity && self.role == other.role
        }
    };
    let thing = 42u64;
    let hair_color = "hair color";
    let appearance = Appearance { 
        identity: &thing, 
        role: &hair_color 
    };
    let another_thing = 43u64;    
    let other_appearance = Appearance { 
        identity: &another_thing, 
        role: &hair_color 
    };
    println!("{}", appearance == other_appearance);
}
Run Code Online (Sandbox Code Playgroud)

当编译器到达时other_appearance,这给了我一个编译错误,告诉我another_thing没有足够长的时间.但是,如果我遗漏了other_appearance程序的创建编译并运行正常.为什么我收到此错误?

rust

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

如何返回对拥有和活着的东西的引用?

如何在以下代码中正确返回set函数中的引用?我确实理解set当块结束时变量超出范围,但它引用的数组是拥有的并且是活动的.一生的尝试'b是徒劳的.

#[derive(PartialEq, Eq, PartialOrd, Ord, Debug)]
struct Appearance<'a> {
    identity:   &'a u64, 
    role:       &'a str
}

#[derive(Clone, Copy, Debug)]
enum Dereference<'a> {
    Dereference1ary {set: [&'a Appearance<'a>;1]},
    Dereference2ary {set: [&'a Appearance<'a>;2]},
}
impl<'a, 'b> Dereference<'a> {
    fn set(&self) -> &'b [&'a Appearance<'a>] {
        match *self {
            Dereference::Dereference1ary{set} => &set,
            Dereference::Dereference2ary{set} => &set
        }
    }
}

fn main() {
    let r = "hair_color";
    let i1 = 42;
    let i2 = 43;
    let a1 = Appearance{identity: &i1, role: r}; …
Run Code Online (Sandbox Code Playgroud)

rust

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

如何对数组进行排序?

为什么我不能按预期排序数组?

fn main() {
    let mut a = [1,3,2];
    let s = a.sort();
    println!("{:?}", s);
}
Run Code Online (Sandbox Code Playgroud)

rust

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

最少的内存使用和最佳性能

我需要存储十亿个"外观",我正在寻找最有效的方式来存储这些内存使用和性能.例如,在这些方面的差异是什么a1, a2, a3:

struct Appearance<'a> {
    identity:   &'a u64, 
    role:       &'a str
}

struct AnotherAppearance<'a>((&'a u64, &'a str));

fn main() {
    let thing = 42;
    let hair_color = "hair color";
    let a1 = Appearance {identity: &thing, role: &hair_color};
    let a2 = AnotherAppearance((&thing, &hair_color));
    let a3 = (&thing, &hair_color);
}
Run Code Online (Sandbox Code Playgroud)

是否有更好的方法来处理这样的结构?另外,有没有办法获取详细信息,a1, a2, a3以便我可以看到它们在内存中如何代表我自己?

rust

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

没有继承的不同事物列表?

我知道如何使用像Java这样的继承语言或像JavaScript这样的无类型语言来制作相关内容的列表,但是我无法弄清楚如何在Rust中做到这一点.这将产生错误,因为Dereference在编译时不知道数组的大小.

#[derive(PartialEq, Eq, PartialOrd, Ord)]
struct Appearance<'a> {
    identity:   &'a u64, 
    role:       &'a str
}

struct Dereference<'a> {
    set:        [&'a Appearance<'a>]
}

fn main() {
    let r = "hair_color";
    let i1 = 42;
    let i2 = 43;
    let a1 = Appearance{identity: &i1, role: r};
    let a2 = Appearance{identity: &i2, role: r};
    let d1 = Dereference{set: [&a1]};
    let d2 = Dereference{set: [&a1, &a2]};
    let list: Vec<Dereference> = vec!(d1, d2);
}
Run Code Online (Sandbox Code Playgroud)

但是,set成员Dereference将是一个小规模的阵列.假设少于32,最常见的是1或2,很少3,并且几乎不是那么大.我可以创建32个结构和32个列表,但为了方便起见,我真的想以更聪明的方式做到这一点.即使我必须创建32个结构,至少有一个列表可以提供很多帮助.我需要它同时具有内存和性能效率.我如何在Rust中实现这一目标?

rust

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

标签 统计

rust ×5