首页
学习
活动
专区
圈层
工具
发布
社区首页 >问答首页 >与expect()函数比较时,Dartz右侧包含列表抛出错误

与expect()函数比较时,Dartz右侧包含列表抛出错误
EN

Stack Overflow用户
提问于 2020-05-15 18:56:31
回答 1查看 238关注 0票数 1

如下所示的简单代码

代码语言:javascript
复制
expect(Right(['Two', 'Three']), equals(Right(['Two', 'Three'])));

抛出错误:

代码语言:javascript
复制
ERROR: Expected: Right<dynamic, List>:<Right([Two, Three])>
Actual: Right<dynamic, List>:<Right([Two, Three])>

我做错了什么?这两个列表是相同的,并且都有相等的元素。

EN

回答 1

Stack Overflow用户

发布于 2020-05-29 05:31:42

Dart默认检查引用相等性,而这里您正在组合两个值相等但引用不相等的数组。常量列表将按照您的预期运行,而运行时定义的列表则不会。

代码语言:javascript
复制
final a = ['Two', 'Three'] == ['Two', 'Three']; // false
final b = const ['Two', 'Three'] == const ['Two', 'Three']; // true

它可能会令人困惑,因为它将通过:

代码语言:javascript
复制
expect(['Two', 'Three'], equals(['Two', 'Three']));

测试库具有迭代器的默认匹配器,并将进行深度检查以匹配列表中的所有字符串,因此以上代码通过。对于Right数据类型则不是这样,它将回退到==-operator,因此会失败,因为它将返回false,如上所示。

Dartz有一个列表实现(immutable),它检查将会成功的深度相等,或者与如上所述的const:

代码语言:javascript
复制
final a2 = ilist('Two', 'Three') == ilist('Two', 'Three') // true

expect(Right(ilist(['Two', 'Three'])), equals(Right(ilist(['Two', 'Three']))));

expect(Right(const ['Two', 'Three']), equals(Right(const ['Two', 'Three'])));
票数 1
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/61817575

复制
相关文章

相似问题

领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档