List.single属性的主要用途是什么?

6 dart

几天前,我注意到Dart的List类有single属性.然后,我阅读了官方API文档,并了解了此属性的工作原理.这意味着我知道其List.single工作原理如下:

print(['a'].single);     // outputs 'a'
print(['a', 'b'].single) // throws StateError
Run Code Online (Sandbox Code Playgroud)

但我找不到该single物业的任何实际用例.当然,上面显示的幼稚代码在实际编程中毫无意义.

该物业的目的是什么?如果List包含两个或更多元素,为什么此属性会抛出异常?为什么它不是一个布尔属性,它代表List是否只有一个元素?Dart语言开发人员如何认为包含List.single在核心API中是有用的?

如果您对此有任何了解,如果您帮助我,我将非常感激.

Fox*_*x32 5

您可以使用single以防万一只Iterable包含一个元素.这是一个真实世界的例子:我们有数据库连接,它具有query执行SQL查询的方法.该方法返回受查询影响的行.现在考虑一个查询,您只希望影响一行:

var row = databaseConnection.query('SELECT * FROM xyz WHERE id=5').single;
Run Code Online (Sandbox Code Playgroud)

如果没有或多于一行受到影响,这会给出一种简短的失败方式.当然,还可以写:

var rows = databaseConnection.query('SELECT * FROM xyz WHERE id=5');

if (rows.length != 1) {
  throw new StateError('Something is wrong');
}

var row = rows.first;
Run Code Online (Sandbox Code Playgroud)

但这要长得多.或者你可能想要assert.

作为List工具Iterable,它也包含single.该single吸气剂也是有用的数据流,如果你希望一个元素.考虑与Stream行相同的示例:

databaseConnection.query('SELECT * FROM xyz WHERE id=5').single.then((row) {
  print('Process the row');
});
Run Code Online (Sandbox Code Playgroud)