【问题标题】:Match parameterized type using Scala's pattern matching使用 Scala 的模式匹配匹配参数化类型
【发布时间】:2015-02-28 14:30:33
【问题描述】:

我有一个class Operator[T: TypeTag : ClassTag],在它的方法中,我想在参数化类型T 上使用Scala 的模式匹配。我知道模式匹配是如何工作的,所以在 Scala 的 repl 中尝试了以下操作并得到了错误。

scala> def matchTest() = T match {
     | case x: String => "abcd"
     | case _ => null
     | }
<console>:11: error: not found: value T
       def matchTest() = T match {
                            ^

【问题讨论】:

标签: scala generics types pattern-matching


【解决方案1】:

T 是一个类型,而不是一个值。您只能匹配值。

您可以获得implicitly[ClassTag[T]]implicitly[TypeTag[T]],它们是值,并对其进行匹配。

【讨论】:

  • classTag[T]typeTag[T] 是这些的简写。 :)
  • 你能给我完整的例子吗,我在做def matchTest[T: TypeTag: ClassTag]() = typeTag[T] match { case typeTag[String] =&gt; "abcd" case _ =&gt; null }时仍然遇到一些错误
  • @KamalBanga 因为您可以在大小写匹配时调用函数。首先将typeTag[String] 分配给一个变量,然后匹配它。
猜你喜欢
  • 2016-05-12
  • 2014-07-01
  • 2020-08-09
  • 1970-01-01
  • 2013-03-17
  • 1970-01-01
  • 2019-09-16
  • 2014-03-05
  • 2016-04-02
相关资源
最近更新 更多