【问题标题】:Difference between initializing with new operator and initializing with literal in DartDart 中用 new 操作符初始化和用字面量初始化的区别
【发布时间】:2012-09-07 18:50:15
【问题描述】:

在 Dart 中,用 new 操作符初始化 List<int> 和用字面量初始化它有什么区别?

案例一:

List<int> args = new List<int>(2);
args[0] = 1;
args[1] = 2;

案例2:

List<int> args = <int>[1, 2];

当我将 args 发布到本机服务端口时,服务端口将收到不同的消息。使用 new 操作符初始化的 List 实例被序列化为 Dart_CObject::kIntArray,但使用字面量初始化的实例被序列化为类型为 12 的 Dart_CObject 对象。

【问题讨论】:

  • 我刚刚把这个发给了 Dart 团队的某个人,我认为他能够回答这个问题。

标签: dart object-initializers


【解决方案1】:

有一个微小的区别——在第一种情况下,您正在创建一个固定大小的列表,而在第二种情况下,列表是可增长的。如果您在第一种情况下使用“new List()”,则没有区别。我不能 100% 确定,因为我现在无法对其进行测试,但这就是我的理解方式(我确信 VM 具有用于固定大小列表和可增长列表的单独类)。

【讨论】:

  • 感谢您的评论。但我想知道为什么它们被序列化为不同的 Dart_CObjects。
  • 如果你有新的List&lt;int&gt;() 怎么办?也就是去掉构造函数参数。它们是不同的 CObject 吗?
  • 嗨,Seth Ladd,我认为在案例 1 中创建的 args 和在案例 2 中创建的 args 是同一个对象。但是在我的 Dart 原生扩展中,我收到了不同的 Dart_CObject。使用 new List() 创建的 args 将被序列化为 CObject,与 [1,2] 相同。我想我理解固定大小的列表与可增长的列表不同,[1,2] 将创建一个可增长的列表。非常感谢。
猜你喜欢
  • 1970-01-01
  • 2015-01-31
  • 1970-01-01
  • 2011-07-24
  • 2017-05-13
  • 2011-10-28
  • 1970-01-01
  • 2010-11-06
相关资源
最近更新 更多