Dart ListBase中的不一致

Dart ListBase中的不一致,list,function,dart,List,Function,Dart,Dart的ListBase类中函数的返回类型不一致有什么特殊原因吗 有些函数实现了(作为函数式程序员)我所期望的功能,即:List->(apply function)->List。其中包括:take,skip,reversed 其他的则没有:因此l.removeLast()只返回列表的最后一个元素;要获得没有最后一个元素的列表,必须使用级联:l..removeLast() 另一些返回一个lazy Iterable,这需要进一步的工作来检索列表:newl=l.map(f).toList() 有些函

Dart的ListBase类中函数的返回类型不一致有什么特殊原因吗


有些函数实现了(作为函数式程序员)我所期望的功能,即:List->(apply function)->List。其中包括:
take
skip
reversed

其他的则没有:因此
l.removeLast()
只返回列表的最后一个元素;要获得没有最后一个元素的列表,必须使用级联:
l..removeLast()

另一些返回一个lazy Iterable,这需要进一步的工作来检索列表:
newl=l.map(f).toList()

有些函数的操作更像属性
l.last
,而不是函数
l.removeLast()

这些选择有什么微妙的原因吗?

(免责声明:我还没有专门使用Dart,但希望很快能使用。)

Dart不是一种函数式编程语言,这可能是您困惑的根源

方法(如
.removeLast()
)用于更改所调用对象的状态。
l.removeLast()
执行的操作是修改l,使其不再包含最后一项。只需在下一条语句中使用
l
,即可访问结果列表

(注意,它们被称为“方法”而不是“函数”,因为它们不是数学意义上的真正函数。)

选择返回已删除的项目而不是剩余的列表是一种方便。最常见的情况是,程序需要对删除的项执行某些操作(例如将其移动到其他列表)


对于其他方法,返回的数据将与常见的使用场景相关,但并不总是需要捕获它。

mbmcavoy是正确的。Dart是一种命令式语言,许多
List
成员在适当的位置修改列表。最突出的是运算符
[]=
,但
排序
洗牌
添加
删除
等属于同一类别

除了这些命令式成员之外,列表还继承了一些来自
Iterable
skip
take
where
map
等的函数式成员。这些成员是惰性的,不会就地修改列表。它们得到了原始列表的支持。修改支持列表将更改迭代iterable的结果<代码>列表还添加了一些惰性成员,如
反向


为了避免混淆,懒惰成员总是返回
Iterable
,而不是实现
列表
接口的对象。一些iterables保证了快速的
长度
和索引运算符(如
获取
跳过
反向
),并且可以轻松实现
列表
界面。但是,这将不可避免地导致错误,因为它们是懒惰的,并且由原始列表支持。

获取
跳过
反向
不返回列表。他们返回了一个Iterable。是的。我的意思是说,由于它们不是懒惰的Iterables,它们的行为不同于
map
where
skipWhile
takeWhile
,后者需要后续的
.toList()
来检索内容。它们完全相同。它们返回由原始列表支持的Iterables。如果只使用Iterable函数,那么其他函数也不需要“toList()”:l.map(f)。l、 其中(f).isNotEmpty,…我看不到整个ListBase的一致性,您似乎没有看到。要反转Iterable,语法为
l.reversed
;要洗牌一个Iterable,语法是
l..shuffle()shuffle
,而是关于
take
skip
reversed
。它们与
地图
其中
。。。有两种函数:一种是返回
Iterable
(惰性,由原始列表支持)的函数,另一种是就地函数<代码>排序
随机移动
添加
删除
,属于后一类。