Как изменить целочисленную переменную с помощью булевой функции в Dart - PullRequest
0 голосов
/ 30 марта 2020

Когда я использую булеву функцию для изменения какого-либо списка, он работает:

void main() {
  List<int> list = [];

  changeList(list);

  print("list outside func $list");
}

bool changeList(List<int> list) {
  for (int i = 0; i < 3; i++) {
    list.add(i);
  }
  print("list inside func $list");
  return true;
}

Но с целым числом это не так, и значение изменяется только внутри функции:

void main() {
  int counter = 0;

  changeCounter(counter);

  print("counter outside func $counter");
}

bool changeCounter(counter) {
  for (int i = 0; i < 3; i++) {
    counter += 1;
  }
  print("counter inside func $counter");
  return false;
}

Есть ли какое-нибудь простое решение для изменения целочисленной переменной с помощью булевой функции так же, как список?

Ответы [ 2 ]

0 голосов
/ 30 марта 2020

Язык дартс не позволяет передавать примитивные типы по ссылке

Таким образом, вы можете создать примитивную оболочку, подобную этой

void main() {
  IntegerWrapper counter = IntegerWrapper(0);

  changeCounter(counter);

  print("counter outside func $counter");
}

bool changeCounter(counter) {
  for (int i = 0; i < 3; i++) {
    counter.value += 1;
  }
  print("counter inside func $counter");
  return false;
}

class IntegerWrapper{
  int value;
  IntegerWrapper(this.value);

  String toString(){
    return value.toString();
  }
}
0 голосов
/ 30 марта 2020

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

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