我如何一般地处理Scala集合?
我已经意识到我传递
Scala集合的典型方式可以使用一些改进.
def doSomethingCool(theFoos: List[Foo]) = { /* insert cool stuff here */ } // if I happen to have a List doSomethingCool(theFoos) // but elsewhere I may have a Vector,Set,Option,... doSomethingCool(theFoos.toList) 我倾向于编写我的库函数来将List作为参数类型,但我确信有一些更通用的东西我可以放在那里以避免我在应用程序代码中偶尔的.toList调用.这尤其令人讨厌,因为我的doSomethingCool函数通常只需要调用map,flatMap和filter,它们都是在所有集合类型上定义的. 对于那种“更普遍的东西”,我有哪些选择? 解决方法
以下是更一般的特征,每个特征都扩展了前一个特征:
> GenTraversableOnce 上述特征未指定集合是顺序还是并行.如果您的代码要求按顺序执行某些操作(通常,如果您的代码具有任何类型的副作用),则它们过于笼统. 以下特征要求顺序执行: > TraversableOnce 第一个,TraversableOnce只允许您在集合上调用一个方法.之后,该集合已被“使用”.作为交换,它通常足以接受迭代器和集合. Traversable是一个非常通用的集合,拥有大多数方法.但有些事情是不能做的,在这种情况下你需要去Iterable. 所有Iterable都实现了迭代器方法,它允许您获取该集合的迭代器.这使它能够使用Traversable中不存在的一些方法. Seq [A]实现函数Int => A,表示您可以通过索引访问任何元素.这不能保证有效,但它保证每个元素都有一个索引,并且您可以对该索引的内容进行断言.将其与Map和Set进行对比,您无法分辨元素的索引. LinearSeq是一个提供快速head,tail,isEmpty和prepend的Seq.这是尽可能接近List而不实际明确使用List. 或者,您可以拥有一个IndexedSeq,它具有快速索引访问权限(List不提供). 另见this question和this FAQ. (编辑:李大同) 【声明】本站内容均来自网络,其相关言论仅代表作者个人观点,不代表本站立场。若无意侵犯到您的权利,请及时与联系站长删除相关内容! |
- CXF WebService 4 传递复杂类型对象
- angular – index.html没有加载本地CSS
- twitter-bootstrap – 在哪里可以找到twitter bootstrap少文
- 【WebServices前传二部曲】上部_DTD参数实体和Schema数据类
- WebService学习总结(三)——使用JDK开发WebService
- scala – 如何访问数组列中的值?
- bash – 使用shell脚本切割字符串中的最后n个字符
- twitter-bootstrap – Bootstrap datepicker – 如何以正确
- Cxf拦截器中获取当前请求的参数
- Bootstrap 教程第四课:制作一组功能图标按钮