【问题标题】:Use C-Like Array of Struct in Rust在 Rust 中使用类似 C 的结构数组
【发布时间】:2015-12-06 02:01:03
【问题描述】:

我需要帮助将以下 C 代码转换为 Rust。

#define v0   0x0
#define v1   0x1
#define v2   0x2
#define v3   0x3

struct arr {
    u_int v;
    const char *s;
};

static const struct arr str[] = {
    { v0, "zero"  },
    { v1, "one"   },
    { v2, "two"   },
    { v3, "three" },
    { 0, NULL     }
};

我已经完成了以下 Rust 代码,但我无法找到像 C 代码那样创建结构数组的最佳方法。

static v0: u8 = 0;
static v1: u8 = 1;
static v2: u8 = 2;
static v3: u8 = 3;

struct arr {
    v: u8,
    s: &'static str,
}

我尝试了以下代码,但没有成功:

static str: [arr; 4] = [
    {
        v: v0,
        s:"zero",
    },
    {
        v: v1,
        s:"one",
    },
    {
        v: v2,
        s:"two",
    },
    {
        v: v3,
        s:"three",
    },
];

【问题讨论】:

标签: c arrays struct rust


【解决方案1】:

你的尝试几乎是正确的,只是你需要用名字写出结构构造函数(Rust 中没有快捷方式)

还要注意,Rust 除了static 之外还有const。 (Rust 中的 const 大致相当于 C 中的 const static

游戏围栏:http://is.gd/tPRVq4

const v0: i8 = 0;
const v1: i8 = 1;
const v2: i8 = 2;
const v3: i8 = 3;

struct Arr {
    v: i8,
    s: &'static str,
}

const str: [Arr; 4] = [
    Arr {
        v: v0,
        s:"zero",
    },
    Arr {
        v: v1,
        s:"one",
    },
    Arr {
        v: v2,
        s:"two",
    },
    Arr {
        v: v3,
        s:"three",
    },
];

fn main() {
    println!("{}", str[2].v);
}

【讨论】:

  • 您还应该注意,习惯上以大写开头的类型名称。
  • @lllogiq:我至少会编辑代码,备注本身作为对问题的评论会更好。
  • @MatthieuM。如果您费心实际编译此代码,rustc 会警告您。同样根据 rustc lint 消息,const 项目 str 也应更改为 STR
猜你喜欢
  • 2019-09-03
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 2022-06-15
  • 1970-01-01
  • 2018-09-22
  • 2018-04-26
  • 1970-01-01
相关资源
最近更新 更多