【发布时间】:2012-02-06 14:47:24
【问题描述】:
我对 scala 比较陌生,并且成功地制作了一些非常简单的程序。 然而,现在我正在尝试一些现实世界的问题解决方案,事情变得有点困难......
我想将一些文件读入“配置”对象,使用可以“接受”某些文件(每个 FileTypeReader 子类型一个)的各种“FileTypeReader”子类型,如果它可以从中提取配置,则返回一个 Option[Configuration] .
我试图避免命令式风格,并写了类似这样的东西(使用 scala-io,scaladoc for Path here http://jesseeichar.github.com/scala-io-doc/0.3.0/api/index.html#scalax.file.Path):
(...)
trait FileTypeReader {
import scalax.file.Path
def accept(aPath : Path) : Option[Configuration]
}
var readers : List[FileTypeReader] = ...// list of concrete readers
var configurations = for (
nextPath <- Path(someFolder).children();
reader <- readers
) yield reader.accept(nextPath);
(...)
当然,这不起作用,for-comprehensions 返回第一个生成器类型的集合(这里是一些 IterablePathSet)。
由于我尝试了许多变体并且感觉像在循环中运行,所以我请求您就这件事提出建议以解决我的 - 琐碎问题? - 优雅的问题! :)
非常感谢,
sni.
【问题讨论】:
-
这有点困难,除非你告诉我们理解中元素的类型是什么——即
children()返回什么,readers是什么。 REPL 示例对于提出 scala 问题非常有用,因为它们可以被 REPLicated -
我把我的问题编辑得更清楚了!