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
Dart 对象的打印地址_Dart - Fatal编程技术网

Dart 对象的打印地址

Dart 对象的打印地址,dart,Dart,打印省道对象的地址有什么诀窍吗? 我遇到了一个问题,其中我有一个标准枚举类,如中所述 类访问{ 静态常数IA=常数访问。0; 静态常数RO=常数访问(1); 静态常数RW=常数访问(2); 最终整数值; const Access.u(该值); ... } 变量access的类型为access,值为1,但access==access.RO返回false var-access=\uu.access; 打印(“”) access=>($access,${access.runtimeType},${a

打印省道对象的地址有什么诀窍吗? 我遇到了一个问题,其中我有一个标准枚举类,如中所述

类访问{
静态常数IA=常数访问。0;
静态常数RO=常数访问(1);
静态常数RW=常数访问(2);
最终整数值;
const Access.u(该值);
...
}
变量access的类型为access,值为1,但access==access.RO返回false

var-access=\uu.access;
打印(“”)
access=>($access,${access.runtimeType},${access.value})
static=>(${Access.RO},${Access.RO.runtimeType},${Access.RO.value})
相等?=>${(访问==access.RO)}
''');
印刷品

access=>(RO,access,1)
静态=>(RO,访问,1)
相等?=>假的
如果我提供一个运算符==(访问其他)来比较这些值,它将返回预期值。所以,我想这可能与从不同的库(可能与隔离相关)来上课有关,如果我可以打印access和access.RO的地址,我可以看看它们是否不同。当然,如果它们不同,我也需要知道原因。

当你处理const时,你必须非常小心。如果您使用
new Access.\u0)
而不是
const Access.\u0)
您将无法获得相同的对象。以下是一个例子:

类访问{
静态常数IA=常数访问。0;
静态常数RO=常数访问(1);
静态常数RW=常数访问(2);
最终整数值;
const Access.u(该值);
}
main(){
打印(Access.IA==const-Access.40;(0));//打印为真
打印(Access.IA==new Access.40;(0));//打印错误
}
这可以解释你的问题。

当你处理const时,你必须非常小心。如果您使用
new Access.\u0)
而不是
const Access.\u0)
您将无法获得相同的对象。以下是一个例子:

类访问{
静态常数IA=常数访问。0;
静态常数RO=常数访问(1);
静态常数RW=常数访问(2);
最终整数值;
const Access.u(该值);
}
main(){
打印(Access.IA==const-Access.40;(0));//打印为真
打印(Access.IA==new Access.40;(0));//打印错误
}
这可以解释您的问题。

如果
相同(a,b)
返回false,则可以确保它们的指针不同。(数字不一定是相反的,但这是一个实现细节)

如果您正在处理隔离,则在传输对象时需要小心。甚至,如果他们在一方被规范化,在他们被传播到另一方之后,他们也不会被规范化:

导入'dart:async';
导入“dart:隔离”;
类A{const A();}
foo(){
接收端口((x,ux){
print(x==const A());//Prints false。
});
}
main(){
var p=new ReceivePort();//以保持程序运行。
生成函数(foo).send(const A(),null);
}
还请注意,dart2js不允许传输任意对象。

如果
相同(a,b)
返回false,则可以确保它们的指针不同。(数字不一定是相反的,但这是一个实现细节)

如果您正在处理隔离,则在传输对象时需要小心。甚至,如果他们在一方被规范化,在他们被传播到另一方之后,他们也不会被规范化:

导入'dart:async';
导入“dart:隔离”;
类A{const A();}
foo(){
接收端口((x,ux){
print(x==const A());//Prints false。
});
}
main(){
var p=new ReceivePort();//以保持程序运行。
生成函数(foo).send(const A(),null);
}

还要注意的是,dart2js不允许传输任意对象。

这一点很好,但不是问题所在,因为我不“新建”它们。(事实上,禁用新功能会很好)。通过直接导入dart文件,证明应用程序使用了库。该库还使用import-package:syntax拉入。他们决定要同一份文件,但两次都来了。非常好的--print_classes选项清楚地说明了这一点。dart的功能请求可能是通过拉入文件的完整位置来确定库的唯一性。因此,在这两种情况下,实例函数的print address都会起作用。能做到吗?不幸的是,我不知道这是否可能。这是好的观点,但不是问题所在,因为我不“新”他们。(事实上,禁用新功能会很好)。通过直接导入dart文件,证明应用程序使用了库。该库还使用import-package:syntax拉入。他们决定要同一份文件,但两次都来了。非常好的--print_classes选项清楚地说明了这一点。dart的功能请求可能是通过拉入文件的完整位置来确定库的唯一性。因此,在这两种情况下,实例函数的print address都会起作用。可以这样做吗?不幸的是,我不知道这是否可能。鉴于此,使用enum习惯用法,提供检查实际值的运算符==可能有意义,而不是依赖于项目。运算符==?在这种情况下,这样会更安全。但是,在switch语句中使用命名常量枚举值的情况下,这并没有帮助?我不会覆盖“==”运算符。如果您只有一组有限的实例,那么您实际上需要一个标识比较(这可能也更快)。鉴于此,使用enum习惯用法,提供一个检查实际值的运算符==,而不是依赖于项目。运算符==?在这种情况下,这样会更安全。但是,在switch语句中使用命名常量枚举值的情况下,这并没有帮助?我不会覆盖“==”运算符。如果您只有一组有限的实例,那么您实际上需要进行身份比较(这可能也更快)。