Почему при использовании Rust передача изменяемой структуры в функцию приводит к неизменным полям?

Я изучаю Rust, используя 0.8 на Win8-64. У меня есть тестовая программа, в которой я работаю, где функция, которая обрабатывает ввод параметров, возвращает структуру, содержащую эти параметры. Это работало хорошо. Затем я изменил программу, чтобы передать & struct функции, и теперь я получаю ошибку компилятора, которую я пытаюсь присвоить неизменному полю.

Как я должен передавать указатель / ссылку на структуру, чтобы предотвратить эту ошибку?

Код, который приводит к ошибке (я пробовал несколько вариантов):

let mut ocParams : cParams = cParams::new();     //!!!!!! This is the struct passed

fInputParams(&ocParams);               // !!!!!!! this is passing the struct

if !ocParams.tContinue {
    return;
}

.......

struct cParams {
  iInsertMax : i64,
  iUpdateMax : i64,
  iDeleteMax : i64,
  iInstanceMax : i64,
  tFirstInstance : bool,
  tCreateTables : bool,
  tContinue : bool
}

impl cParams {
  fn new() -> cParams {
     cParams {iInsertMax : -1, iUpdateMax : -1, iDeleteMax : -1, iInstanceMax : -1,
              tFirstInstance : false, tCreateTables : false, tContinue : false}
  }   
}

.....

fn fInputParams(mut ocParams : &cParams) {

    ocParams.tContinue = (sInput == ~"y");    // !!!!!! this is one of the error lines

Все присвоения полям структуры в функции приводят к ошибке во время компиляции. Пример ошибок, возникающих при компиляции:

testli007.rs:240:2: 240:20 error: cannot assign to immutable field
testli007.rs:240   ocParams.tContinue = (sInput == ~"y");   

1 ответ

Решение

В объявлении вашей функции:

fn fInputParams(mut ocParams : &cParams) {

ocParams изменяемая переменная, содержащая заимствованный указатель на неизменяемую структуру Вы хотите, чтобы эта структура была изменчивой, а не переменной. Следовательно, подпись функции должна быть:

fn fInputParams(ocParams : &mut cParams) {

Затем вы должны изменить сам вызов на fInputParams:

fInputParams(&mut ocParams);  // pass a pointer to mutable struct.
Другие вопросы по тегам