自我行为

我想提请大家注意 self 关键字。

这段代码编译得很好。

let color_code = self.color_code;
self.buffer.chars[row][col].write(ScreenChar {
    ascii_character: byte,
    color_code,
});

以我对Java的 这个 关键字,我这么一催,就想到了。self 替换 作为:


self.buffer.chars[row][col].write(ScreenChar {
    ascii_character: byte,
    self.color_code: self.color_code,
});

即,我已经删除了 让color_code 并使用 self.color_code: self.color_code

我很好奇为什么我对Rust的直觉是错误的。

解决方案:

let color_code = self.color_code 不修改 self.color_code. 在这方面,它与Java的隐含的 this..

它所做的是创建一个新的作用域-本地变量 color_code 初始化为 self.color_code.

当你创建初始化一个结构(在你的例子中是指 ScreenChar),那么rust希望你以某种方式初始化成员。摘录于此。

  • field: value: 在这种情况下,rust 假设 field 是该结构成员的名称,但 self.color_code 的成员的名字。ScreenChar (color_code 是)。) 因此,您可能只需要 color_code: self.color_code.
  • field: 在这种情况下,生锈的假设是: field 是结构体成员的名称,同时也要求在作用域内有一个同名的变量。

更多的信息,你可以看一看 https:/doc.rust-lang.orgbookch05-01-defining-structs.html#defining-and-instantiating-structs。.

本文来自投稿,不代表实战宝典立场,如若转载,请注明出处:https://www.shizhanbaodian.com/88.html

(0)
上一篇 2022年5月29日 下午8:34
下一篇 2022年5月29日 下午8:34

相关推荐

发表评论

登录后才能评论