Dart ListBase中的不一致
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() 有些函
有些函数实现了(作为函数式程序员)我所期望的功能,即: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
(惰性,由原始列表支持)的函数,另一种是就地函数<代码>排序
,随机移动
,添加
,删除
,属于后一类。