gpt4 book ai didi

dart - 我们如何在 Dart 2 中将 int 转换为 BigInt?

转载 作者:行者123 更新时间:2023-12-03 02:45:09 25 4
gpt4 key购买 nike

玩弄 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: Class 'int' has no instance method 'pow' 异常。看来 x被视为 Vanilla 味 int ...

此外,如果我尝试实例化 x更明确:
var x = new BigInt.from(5);

我得到 NoSuchMethodError: Class 'int' has no instance getter '_used'。

我是不是误会了 the documentation ?具体来说,我们如何转换 int , 喜欢 5['a', 'b', 'c'].length ,作为 BigInt目的?

编辑:虽然这并不能解释为什么 BigInt x = 5然后是 x % 3 这样的表达式不会产生错误并按预期工作,这似乎只是由于 BigInt s 和 int在一起玩得不好。例如,一次 x确实代表了 BigInt (与使用 BigInt x = 5 实例化不同,在此之后 x 似乎代表常规 int )然后表达式 x % 3不起作用,因为 %操作期待 BigInt在右侧,其中 3不是。 (表达式需要更改为笨拙的 x % new BigInt.from(3) 以摆脱 NoSuchMethodError: Class 'int' has no instance getter '_used' 异常。)

正如我已经提到的,这并不能解释一切。事实上,如 BigInt x = 5 这样的表达式是允许的,并且诸如 x % 3 之类的表达式然后按预期工作表明 BigInt s 和 int s 旨在无缝地协同工作,至少在某些设计师的论文中...

最佳答案

您正在 Dart 1 生产模式下运行 Dart,并且没有使用分析器测试您的代码。这意味着您没有进行类型检查,并且您的程序确实不是类型正确的。
文字 5不是 BigInt ,它是一个 int .您将其分配给类型为 BigInt 的变量,但在 Dart 1 生产模式下,变量类型被忽略,从而“成功”。BigInt s 和 int s 并不是要无缝地一起工作,但是如果您实际上不检查类型,您将不会知道您使用的是错误的类型。

您的修复,var x = new BigInt.from(5); , 是正确的。 Dart 不做隐式转换,你必须显式创建一个 BigInt得到一个。
这也意味着您必须执行以下操作:

var x = new BigInt.from(5);
print(x % new BigInt.from(3)); // 2

该代码应该可以工作。所以如果它抛出,那就是有问题。我尝试了 Dart 2.0.0-dev.49.0 中的代码,它奏效了。您使用的是哪个版本的 Dart ( dart --version ) 以及如何运行它?

如果您将程序运行为 dart --checked program.dart那么当您尝试分配 int 时,您将收到类型错误。到 BigNum多变的。

关于dart - 我们如何在 Dart 2 中将 int 转换为 BigInt?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/50074813/

25 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com