Как мне получить доступ к структурной переменной из другой функции?

#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 не становится ее владельцем, что делает передаваемый параметр повторно используемым.