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