самостоятельное поведение в Rust - PullRequest
0 голосов
/ 22 апреля 2020

Я хочу обратить внимание на ключевое слово self.

Этот код отлично компилируется:

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

С моим знанием Java * this ключевое слово, мне так хочется думать о self замене неправильно как:


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

ie, я удалил let color_code и использовал self.color_code: self.color_code

Я не знаю ios о том, почему моя интуиция ошибочна в отношении Rust.

1 Ответ

1 голос
/ 22 апреля 2020

let color_code = self.color_code не изменяет self.color_code. В этом отношении он очень отличается от Java подразумеваемого this..

. Вместо этого он создает новую локальную переменную области действия color_code, которая инициализируется с помощью self.color_code.

.

Когда вы создаете / инициализируете структуру (в вашем случае ScreenChar), тогда Руст ожидает, что вы инициализируете элементы определенным образом. Выдержка здесь:

  • field: value: в этом случае ржавчина предполагает, что field является именем члена структуры, но self.color_code не является именем члена ScreenChar (color_code есть). Таким образом, вы, вероятно, хотите только color_code: self.color_code.
  • field: в этом случае ржавчина предполагает, что field - это имя члена структуры, а также требуется переменная с тем же именем в области видимости.

Для получения дополнительной информации вы можете взглянуть на https://doc.rust-lang.org/book/ch05-01-defining-structs.html#defining -и-экземпляры-структуры .

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...