Scala的集合库包含了代理IterableForwarder,TraversableForwarder,SeqForwarder和代理一样IterableProxy,MapProxy,SeqProxy,SetProxy,TraversableProxy,等代理和代理两种委托收集方法到底层集合对象.这两者之间的主要区别在于转发器不会转发会创建相同类型的新集合对象的调用.
在哪种情况下,我更喜欢这些类型中的一种?货运代理为何以及何时有用?如果他们是有用的,为什么会有不MapForwarder和SetForwarder?
我假设如果想要使用其他方法为集合构建包装器或者对标准集合进行操作,则最常使用代理.
我想在一些Iterable中找到一些符合某些给定类型的元素,并验证将该类型作为参数的谓词.
我使用命令式编程编写了这个方法,这似乎符合我的期望.有没有办法用更"scalaesque"的方式写这个?
def findMatch[T](it: Iterable[_], clazz: Class[T], pred: T => Boolean): Option[T] = {
val itr = it.iterator
var res: Option[T] = None
while (res.isEmpty && itr.hasNext) {
val e = itr.next()
if (clazz.isInstance(e) && pred(clazz.cast(e))) {
res = Some(clazz.cast(e))
}
}
res
}
Run Code Online (Sandbox Code Playgroud) 我正在寻找以纯函数风格用Scala编写的开源项目,即不使用vars或可变数据结构(或者根据需要使用它们作为litte).我更喜欢应用程序而不是框架和库,因为我想看看功能对象是如何"粘合在一起"的.
请注意,此问题类似于/sf/ask/149517651/,但此处的重点是项目的purley功能样式.