scala变量参数列表,逐个名称

  • 本文关键字:变量 参数 列表 scala scala
  • 更新时间 :
  • 英文 :


我有一些这样的代码:

def foo (s: => Any) = println(s)

但是,当我想将其转换为具有可变长度的参数列表时,它不会再编译了(在Scala 2.10.0-rc2上进行了测试):

def foo (s: => Any*) = println(s)

我必须写什么,它可以像这样起作用?

您必须使用零题词函数。如果需要,您可以

implicit def byname_to_noarg[A](a: => A) = () => a

,然后

def foo(s: (() => Any)*) = s.foreach(a => println(a()))
scala> foo("fish", Some(7), {println("This still happens first"); true })
This still happens first
fish
Some(7)
true

有一个问题:https://issues.scala-lang.org/browse/si-5787

对于接受的答案,要恢复所需的行为:

object Test {
  import scala.language.implicitConversions
  implicit def byname_to_noarg[A](a: => A) = () => a
  implicit class CBN[A](block: => A) {
    def cbn: A = block
  }
  //def foo(s: (() => Any)*) = s.foreach(a => println(a()))
  def foo(s: (() => Any)*) = println(s(1)())
  def goo(a: =>Any, b: =>Any, c: =>Any) = println(b)
  def main(args: Array[String]) {
    foo("fish", Some(7), {println("This still happens first"); true })
    goo("fish", Some(7), {println("This used to happens first"); true })
    foo("fish", Some(7), {println("This used to happens first"); true }.cbn)
  }
}

原谅lolcats语法。

最新更新