Warning: file_get_contents(/data/phpspider/zhask/data//catemap/1/dart/3.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
其中是num';s运算符==在Dart中定义?_Dart - Fatal编程技术网

其中是num';s运算符==在Dart中定义?

其中是num';s运算符==在Dart中定义?,dart,Dart,当我在Android仿真器中运行此代码时,它会打印以下内容 void main(){ 打印(1==1.0);//真 打印(相同(1,1.0));//错误 } 我还了解到,==的默认实现是相同的。这意味着操作符=被重写,但是,当我转到num类查看其实现时,它显示该方法是抽象的 bool操作符==(对象其他); 因此,我在double和int类中查看了它的实现,但在那里找不到任何东西。那么,神奇的事情发生在哪里呢?这些都是在本机级别实现的,Dart声明只是这些实现的一个接口。这些实现可以在Dar

当我在Android仿真器中运行此代码时,它会打印以下内容

void main(){
打印(1==1.0);//真
打印(相同(1,1.0));//错误
}
我还了解到,
==
的默认实现是相同的。这意味着操作符
=
被重写,但是,当我转到
num
类查看其实现时,它显示该方法是抽象的

bool操作符==(对象其他);

因此,我在
double
int
类中查看了它的实现,但在那里找不到任何东西。那么,神奇的事情发生在哪里呢?

这些都是在本机级别实现的,Dart声明只是这些实现的一个接口。这些实现可以在Dart sdk存储库中找到

如果您想查看VM中的实现,可以转到VM/lib文件夹,找到包含运算符的double和integer实现

我将以的VM实现为例,定义
==
运算符及其使用的方法:

@pragma(“vm:已识别”,“asm内在”)
@pragma(“vm:精确结果类型”,bool)
@pragma(“vm:从不内联”)
布尔运算符==(对象其他){
if(其他为num){
返回其他._equaltoonteger(本);
}
返回false;
}
@pragma(“vm:已识别”,“asm内在”)
@pragma(“vm:精确结果类型”,bool)
bool_equaltoonteger(int-other)本机“Integer_equaltoonteger”;

您可以在Double中找到相同的代码,在dart2js编译器中也可能找到类似的代码。但是,JS编译器可能不需要特殊的定义,因为
num
=
运算符的定义行为似乎与JS的行为相同。

这些是在本机级别实现的,Dart声明只是这些实现的一个接口。这些实现可以在Dart sdk存储库中找到

如果您想查看VM中的实现,可以转到VM/lib文件夹,找到包含运算符的double和integer实现

我将以的VM实现为例,定义
==
运算符及其使用的方法:

@pragma(“vm:已识别”,“asm内在”)
@pragma(“vm:精确结果类型”,bool)
@pragma(“vm:从不内联”)
布尔运算符==(对象其他){
if(其他为num){
返回其他._equaltoonteger(本);
}
返回false;
}
@pragma(“vm:已识别”,“asm内在”)
@pragma(“vm:精确结果类型”,bool)
bool_equaltoonteger(int-other)本机“Integer_equaltoonteger”;
您可以在Double中找到相同的代码,在dart2js编译器中也可能找到类似的代码。但是,JS编译器可能不需要特殊的定义,因为
num
=
操作符的定义行为似乎与JS的行为相同