我正在使用以下代码的项目中工作:
case class R(f: Vector[String], s: Vector[String]) {
def apply(name: String): String = f(schema indexOf name)
def apply(names: S): Vector[String] = names map (this apply _)
}
def processCSV(file: String)(yld: R => Unit): Unit = {
val in = new Scanner(file)
val s= in.next('\n').split(",").toVector
while (in.hasNext) {
val f = schema map (n => in.next(if (n == s.last) '\n' else ','))
yld(R(f, s))
}
}
def execOp(op: Operator)(yld: R => Unit): Unit = op match {
case Scan(file, _, _, _) => processCSV(file)(yld)}
然后我的问题是yld的含义是什么?收益率是一样的吗? 究竟是如何运作的,有人可以帮助我理解这是如何运作的?
答案 0 :(得分:2)
yield
是与for-comprehensions一起使用的scala关键字。
yld
非常不同:它只是代码作者为函数processCSV
和execOp
提供参数之一的名称。可以为这些参数指定任何其他名称:fn
,callback
,cb
等。没有什么特别之处。给定类型R => Unit
,它只是一个以R
作为输入并返回Unit
(相当于java中的void
)的函数。基本上,一个回调,其中工作作为副作用发生。