和SCALA的收益率

时间:2017-04-29 00:08:16

标签: scala

我正在使用以下代码的项目中工作:

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的含义是什么?收益率是一样的吗? 究竟是如何运作的,有人可以帮助我理解这是如何运作的?

1 个答案:

答案 0 :(得分:2)

yield是与for-comprehensions一起使用的scala关键字。

该代码中的

yld非常不同:它只是代码作者为函数processCSVexecOp提供参数之一的名称。可以为这些参数指定任何其他名称:fncallbackcb等。没有什么特别之处。给定类型R => Unit,它只是一个以R作为输入并返回Unit(相当于java中的void)的函数。基本上,一个回调,其中工作作为副作用发生。