我有一系列功能。如何在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());
}
}
答案 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时,名称丢失。