Передача одного случайного значения двум супер аргументам - PullRequest
0 голосов
/ 12 июля 2020

Обычно я хочу дважды передать случайный аргумент родительскому классу.


Рассмотрим следующий пример:

import 'dart:math' as math;

class A {
  double a;
  double b;

  A(this.a, this.b) {
    if (a != b) {
      print('Error');
    } else {
      print('Alright');
    }
  }
}

class B extends A {
  B() : super(math.Random().nextDouble(), math.Random().nextDouble());
}

main() {
  B();
}

Вот единственное решение, которое я могу придумать, но это кажется таким хакерским ... Я надеюсь, что кто-то другой может предоставить мне лучший.

import 'dart:math' as math;

class A {
  double a;
  double b;

  A(this.a, this.b) {
    if (a != b) {
      print('Error');
    } else {
      print('Alright');
    }
  }
}

class B extends A {
  static List<double> _c = [0];
  bool uselessBool;

  B() : uselessBool = random(),
        super(_c[0], _c[0]);

  static bool random() {
    _c[0] = math.Random().nextDouble();
    return true;
  }
}

main() {
  B();
}

То, что я мог бы существовать, было бы примерно таким (как вы сделать в python например):

import 'dart:math' as math;

class A {
  double a;
  double b;

  A(this.a, this.b) {
    if (a != b) {
      print('Error');
    } else {
      print('Alright');
    }
  }
}

class B extends A {

  B() {
    var c = math.Random().nextDouble();
    super(c, c);
  }
}

main() {
  B();
}

1 Ответ

3 голосов
/ 12 июля 2020

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

import 'dart:math' as math;

class A {
  double a;
  double b;

  A(this.a, this.b) {
    if (a != b) {
      print('Error');
    } else {
      print('Alright');
    }
  }
}

class B extends A {
  B() : this._(math.Random().nextDouble());
  B._(double value) : super(value, value);
}

void main() {
  B();
}

Если вам нужен более сложный logi c, вы также можете взглянуть на конструкторы factory, которые в основном работают как stati c методы, но должен возвращать экземпляр класса.

...