是否有一种简单的方法来检查某个实例在Scala中是否是FunctionX



是否有比下面显示的解决方案更简单的解决方案来检查实例是否为Function0/Function1…?

 def isFunction(x: Any) = x match {
        case x: Function0[_] => true
        case x: Function1[_,_] => true
        case x: Function2[_,_,_] => true
        case x: Function3[_,_,_,_] => true
        case x: Function4[_,_,_,_,_] => true
        case x: Function5[_,_,_,_,_,_] => true
        case x: Function6[_,_,_,_,_,_,_] => true
        case x: Function7[_,_,_,_,_,_,_,_] => true
        case x: Function8[_,_,_,_,_,_,_,_,_] => true
        case x: Function9[_,_,_,_,_,_,_,_,_,_] => true
        case x: Function10[_,_,_,_,_,_,_,_,_,_,_] => true
        case x: Function11[_,_,_,_,_,_,_,_,_,_,_,_] => true
        case x: Function12[_,_,_,_,_,_,_,_,_,_,_,_,_] => true
        case x: Function13[_,_,_,_,_,_,_,_,_,_,_,_,_,_] => true
        case x: Function14[_,_,_,_,_,_,_,_,_,_,_,_,_,_,_] => true
        case x: Function15[_,_,_,_,_,_,_,_,_,_,_,_,_,_,_,_] => true
        case x: Function16[_,_,_,_,_,_,_,_,_,_,_,_,_,_,_,_,_] => true
        case x: Function17[_,_,_,_,_,_,_,_,_,_,_,_,_,_,_,_,_,_] => true
        case x: Function18[_,_,_,_,_,_,_,_,_,_,_,_,_,_,_,_,_,_,_] => true
        case x: Function19[_,_,_,_,_,_,_,_,_,_,_,_,_,_,_,_,_,_,_,_] => true
        case x: Function20[_,_,_,_,_,_,_,_,_,_,_,_,_,_,_,_,_,_,_,_,_] => true
        case x: Function21[_,_,_,_,_,_,_,_,_,_,_,_,_,_,_,_,_,_,_,_,_,_] => true
        case x: Function22[_,_,_,_,_,_,_,_,_,_,_,_,_,_,_,_,_,_,_,_,_,_,_] => true
        case _ => false
  }

  val x = () => 4
  println(isFunction(x))

你的意思是给定:

scala> val f = (i: Int, j: Int) => i + j
f: (Int, Int) => Int = <function2>

你想说

scala> val r = "scala.*Function\d+".r
r: scala.util.matching.Regex = .*Functiond+
scala> def test(a: Any): Boolean = { def t(k: Class[_]): Boolean = k.getName match { case r() => true case _ => if (k.getSuperclass != null) t(k.getSuperclass) else false } ; t(a.getClass) }
test: (a: Any)Boolean
scala> test(f)
res1: Boolean = true

?

这和Tuple测试是一样的

相关内容

  • 没有找到相关文章

最新更新