Играя с классом BigInt
в Dart 2 (версия Dart VM: 2.0.0-dev.50.0), я столкнулся со следующими проблемами:
BigInt x = 5;
print(x % 3); // 2
print(x ~/ 3); // 1
Пока все хорошо, но ...
Когда я пытаюсь получить доступ к методам, например:
print(x.pow(2));
Я получаю NoSuchMethodError: Класс 'int' не имеет метода экземпляра 'pow' исключение. Похоже, что x
рассматривается как ароматизированный ванилью int
...
Далее, если я попытаюсь создать экземпляр x
более явно:
var x = new BigInt.from(5);
Я получаю NoSuchMethodError: Класс 'int' не имеет получателя экземпляра '_used'.
Не понимаю ли я документации ? В частности, как мы можем привести int
, как 5
или ['a', 'b', 'c'].length
, как BigInt
объект?
Редактировать: Хотя это не объясняет, почему BigInt x = 5
, а затем такие выражения, как x % 3
, не генерируют ошибок и работают, как ожидается, это, по-видимому, просто из-за того, что BigInt
s и int
s не воспроизводятся хорошо вместе Например, если x
действительно представляет BigInt
(в отличие от того, когда он создается с использованием BigInt x = 5
, после которого x
представляет обычный int
), то выражение x % 3
не работает, потому что Для операции %
ожидается BigInt
справа, а 3
- нет. (Выражение должно измениться на неуклюжее x % new BigInt.from(3)
, чтобы избавиться от NoSuchMethodError: Класс 'int' не имеет метода получения экземпляра '_used' исключение.)
Как я уже говорил, это не все объясняет. Тот факт, что такие выражения, как BigInt x = 5
разрешены, и что выражения, такие как x % 3
, работают тогда, как и ожидалось, говорит о том, что BigInt
s и int
s равны означали , чтобы работать без проблем, по крайней мере на некоторых дизайнерских работах ...