#variables #struct #rust
#переменные #структура #Ржавчина
Вопрос:
Я пытаюсь создать простую игру в качестве практики изучения Rust, и я хочу создать функцию, которая печатает статистику игрока.
Я создал структуру для статистики игроков, а затем определил их в основной функции.
#[derive(Debug)]
struct Player<'a> {
max_health: i32,
current_health: i32,
attack_dmg: i32,
level: i32,
name: amp;'a str,
}
А затем определил их следующим образом:
pub fn main() {
let mut name = "";
let mut level = 1;
let mut attack_dmg = 30;
const max_health: i32 = 100;
let mut current_health = 100;
let player = Player { name, level, attack_dmg, current_health, max_health };
}
Затем я печатаю статистику следующим образом:
pub fn stat_printer() {
println!("Your stats are: {:?}", player);
}
При попытке компиляции я получаю сообщение об ошибке, что проигрыватель не найден в области действия функции принтера статистики.
Комментарии:
1. Вы, кажется, не знакомы с идеей областей видимости . Rust, как и любой скомпилированный язык, о котором я знаю, вводит новый уникальный sope для каждой функции. Если вы хотите использовать свои переменные в других функциях, рассмотрите возможность передачи их в качестве параметров .
2. Да, я не особо знаком. Я довольно новичок в программировании в целом. Спасибо за ссылки и информацию.
Ответ №1:
в вашей stat_printer()
функции у вас нет доступа, к player
которому вы инициализировали main
. Попробуйте передать player
в качестве ссылочного параметра stat_printer()
, но вы также должны сделать Player
struct общедоступным.
#[derive(Debug)]
pub struct Player<'a> {
max_health: i32,
current_health: i32,
attack_dmg: i32,
level: i32,
name: amp;'a str,
}
// ...
pub fn stat_printer(player: amp;Player) {
println!("Your stats are: {:?}", player);
}
Передача в качестве ссылки (amp;Player) необходима, поэтому функция stat_printer
не становится ее владельцем, что делает передаваемый параметр повторно используемым.