2
可以说,我想要写泛型函数foo
,将使用模式匹配来检查传入的参数的类型是否为它的是一般的参数T
模式匹配和(ereased)泛型函数类型参数
天真的尝试:
def foo[T]: PartialFunction[Any, Boolean] = {
case x: T =>
true
case _ =>
false
}
...将不会工作,因为T
得到升高。 Compiller警告确认:
Warning:(11, 13) abstract type pattern T is unchecked since it is eliminated by erasure
case x: T =>
^
让它工作的最佳方法是什么?
请注意,类型匹配与函数式编程很少有关,它在Scala中被破坏的事实实际上是一件好事(它的部分支持以及该语言提供了诸如'ClassTag'的变通方法,这只是一种耻辱) 。 – 2014-10-06 12:37:52
@ Travis:Eugeny的问题没有被标注为“函数式编程”,他也没有提到它。 Scala不仅仅是一种函数式编程语言,也是一种面向对象(甚至是命令式)的编程语言,为什么它不能提供解决方法?匹配类型在面向对象编程中非常有用。如果你不想面向对象,scala毕竟是错误的语言。 – 2014-10-07 10:27:10
@Martin我的投诉并不是关于功能,而是关于Scala将它与模式匹配混合的事实(这可能是许多人第一次接触FP)。如果它有自己独特的语法(并且在泛型上没有可怕的问题),那肯定会很棒。 – 2014-10-07 12:26:09