Warning: file_get_contents(/data/phpspider/zhask/data//catemap/2/scala/19.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Scala变量参数列表是否可以按名称调用?_Scala - Fatal编程技术网

Scala变量参数列表是否可以按名称调用?

Scala变量参数列表是否可以按名称调用?,scala,Scala,我有一些这样的代码: def foo (s: => Any) = println(s) 但当我想将其转换为可变长度的参数列表时,它将不再编译(在Scala 2.10.0-RC2上测试): 我必须写什么,它是这样工作的?您必须使用零参数函数。如果你愿意,你可以 implicit def byname_to_noarg[A](a: => A) = () => a 然后 def foo(s: (() => Any)*) = s.foreach(a => println

我有一些这样的代码:

def foo (s: => Any) = println(s)
但当我想将其转换为可变长度的参数列表时,它将不再编译(在Scala 2.10.0-RC2上测试):


我必须写什么,它是这样工作的?

您必须使用零参数函数。如果你愿意,你可以

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
有一个问题:

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

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语法。

它也不能在2.9.2上编译(也不确定它是否应该编译)。
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)
  }
}