繁体   English   中英

在Scala中匹配类型

matching types in scala

提示:本站收集StackOverFlow近2千万问答,支持中英文搜索,鼠标放在语句上弹窗显示对应的参考中文或英文, 本站还提供   中文繁体   英文版本   中英对照 版本,有任何建议请联系yoyou2525@163.com。

是否可以在Scala中匹配类型? 像这样:

  def apply[T] = T match {
    case String => "you gave me a String",
    case Array  => "you gave me an Array"
    case _ => "I don't know what type that is!"
  }

(但是编译,很明显:))

也许正确的方法是类型重载……可能吗?

不幸的是,我无法将其传递给对象和模式匹配的实例。

3 个回复
def apply[T](t: T) = t match {
  case _: String => "you gave me a String"
  case _: Array[_]  => "you gave me an Array"
  case _ => "I don't know what type that is!"
}

您可以使用清单并对其进行模式匹配。 但是,传递数组类的情况是有问题的,因为JVM对每种数组类型使用不同的类。 要变通解决此问题,您可以检查是否有问题的类型被擦除为数组类:

val StringManifest = manifest[String]

def apply[T : Manifest] = manifest[T] match {
  case StringManifest => "you gave me a String"
  case x if x.erasure.isArray => "you gave me an Array"
  case _ => "I don't know what type that is!"
}

Manifest ID已弃用。 但是你可以使用TypeTag

import scala.reflect.runtime.universe._

def fn[R](r: R)(implicit tag: TypeTag[R]) {

  typeOf(tag) match {
       case t if t =:= typeOf[String] => "you gave me a String"
       case t if t =:= typeOf[Array[_]] => "you gave me an Array"
       case _ => "I don't know what type that is!"
  }
}

希望这可以帮助。

2 与Scala中的数组类型不匹配

我试图建立一个数组的数组,以将其作为方法的参数。 内部数组的值是任何类型的数据(AnyVal),例如Int或Double。 该方法的签名如下: 这是代码: 但是,我有两个错误: 可能是什么问题? ...

3 for循环,Scala中的类型不匹配

我遇到了persistand错误。 当我尝试编译时,此代码块会产生类型不匹配错误: 我不明白从哪里获取String的,以及当我尝试以下代码时: 我得到以下内容: ...

2016-06-26 17:49:09 1 108   scala
4 Scala中的匹配类型符号

最近几天,我问了几个有关Scala中反射的问题,因为它对我来说仍然很新。 新的实际上是两个相关的问题: 您将如何创建一个根据输入类型返回不同结果的函数? 您可以对反射API返回的TypeSymbol和Type对象做同样的TypeSymbol吗? 示例(不编译,但大 ...

5 Scala中的类型不匹配错误

从昨天开始,我因类型不匹配错误而被阻止,但我看不到如何纠正它。 也许您可以帮助我。 这是我得到的错误: 类型Occurrences定义为type Occurrences = List[(Char, Int)] 如何解决此错误? ...

7 在 Scala 中更好地对匹配进行类型检查

在上面的例子中,编译器不应该告诉我其中一种情况永远不会匹配吗? 最近一个稍微复杂的例子让我发现了,这导致了一个应该被编译器捕获的不必要的错误。 编辑: 只是为了更清楚地了解这个问题。 由于某种我看不到的原因,这在 Scala 中是不可能的吗? (我可以理解这些类型是否使用了泛型并且类型擦除 ...

8 令人困惑的Scala中的类型不匹配

我有: 其中, Exercise02.count是java.util.Iterator[String] => Map[String, Int] ,只生成输入java.util.Iterator[String]中每个单词的计数。 我写了一个测试: 第一行编译得很好,测试 ...

9 如何解决scala中的类型不匹配

我需要一些关于 Scala 中这段代码的帮助,我想实现 foldL 方法,但我得到了这个: 我知道这是一种类型不匹配,但我是 Scala 和面向对象的新手,我不明白如何解决这种情况。 ...

10 使用reduceByKey时,scala中的类型不匹配

我已经在scala shell中分别测试了我的错误代码 我想使用a._1作为密钥,这样我就可以进一步使用join运算符,并且它必须是(密钥,值)对。 但是我的问题是,为什么我在使用归约函数时required一个required类型? 我认为格式是由我们自己设定的,而不是受管制的。 ...

暂无
暂无

声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.

 
粤ICP备18138465号  © 2020-2021 STACKOOM.COM