在println()中打印出函数的名称?

时间:2011-12-19 03:12:31

标签: scala

我有一系列功能。如何在println()函数中获取要打印的名称?在下面的代码中,我得到了这个输出:

<函数2>
  <函数2>
  <函数2>

假设在我的真实代码中,我有更多具有更多描述性名称的函数。

def printNames() {

   def f1(x: Int, y: Int): Int = x + y

   def f2(x: Int, y: Int): Int = x - y

   def f3(x: Int, y: Int): Int = x * y

   val fnList = Array(f1 _, f2 _, f3 _)
   for (f <- fnList) {
     println(f.toString());
   }

}

2 个答案:

答案 0 :(得分:6)

Scala中的函数不具有描述性名称,只有Ints或Lists具有描述性名称;你可以为toString提供一个代表其价值的案例,但这不是一个名字。

但是,你可以扩展Function2

object f1 extends Function2[Int, Int, Int] {
  def apply(a: Int, b: Int) = a + b
  override def toString = "f1"
}

将按您的意愿行事。

或者更一般地说

class NamedFunction2[T1,T2,R](name: String, f: Function2[T1,T2,R]) 
                                       extends Function2[T1,T2,R] {
  def apply(a: T1, b: T2): R = f.apply(a, b)
  override def toString = name
}

然后用作

val f1 = new NamedFunction2[Int, Int, Int]("f1", _ + _)

答案 1 :(得分:2)

你不能;从方法转换为Function2时,名称丢失。