Warning: file_get_contents(/data/phpspider/zhask/data//catemap/2/scala/18.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中的FunctionX?_Scala_Reflection_Types - Fatal编程技术网

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

是否有一种简单的方法来检查某个实例是否是Scala中的FunctionX?,scala,reflection,types,Scala,Reflection,Types,是否有比下面所示的解决方案更详细的解决方案来检查实例是否为Function0/Function1 def isFunction(x: Any) = x match { case x: Function0[_] => true case x: Function1[_,_] => true case x: Function2[_,_,_] => true case x: Function3[_,_,_,_] =>

是否有比下面所示的解决方案更详细的解决方案来检查实例是否为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>
?


我认为这是“容易”的方式,尽管它可能比你想的更冗长。但是,没有可以测试的基类,也没有任何其他属性。。。但是我关心的是这个解决方案的性能!很自然,但您的用户故事“没有那么冗长”。也许全面的Java8支持在将来会有所帮助。这也有可能是性能不会被订单关闭。
scala> val r = "scala.*Function\\d+".r
r: scala.util.matching.Regex = .*Function\d+

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