scala - 以任何对象作为参数的函数

标签 scala pattern-matching type-parameter

import scala.reflect.runtime.universe._
import scala.reflect.ClassTag

class A
class B

def foo[A](x: A) = typeOf[A] match {
    case x:A => println("this an A")
    case _ => println("no match")
  }
}

但这将被证明是无用的,因为不可能匹配,我明白:

fruitless type test: a value of type runtime.universe.Type cannot also be a A

我想让foo采用任何type类,从基本类型到自定义类。我该怎么做?

最佳答案

您可以通过以下方式使用ClassTag来实现它

import scala.reflect.ClassTag

def foo[A: ClassTag](x: A) = x match {
  case x: A => println(s"this an ${x.getClass}")
  case _ => println("no match")
}

A 可以是任何类型。

关于scala - 以任何对象作为参数的函数,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/41568058/

相关文章:

scala - 用不同的顺序对两列的Spark Dataframe进行排序

scala - RDD 的 foreachPartition 方法内的意外行为

function - Haskell 模式匹配在负数上失败

generics - 如何在 kotlin 中使用泛型编写 lambda?

scala - 为什么在使用后在单独的特征中定义的隐式会导致编译错误?

database - 如何使用 scala sorm 遍历大量记录

pattern-matching - Racket 匹配语义与 null

java - 单引号检测所需的正则表达式

c# - 表达式树中未发生隐式转换

编译器未找到泛型类型类的 C# 扩展方法