- html - 出于某种原因,IE8 对我的 Sass 文件中继承的 html5 CSS 不友好?
- JMeter 在响应断言中使用 span 标签的问题
- html - 在 :hover and :active? 上具有不同效果的 CSS 动画
- html - 相对于居中的 html 内容固定的 CSS 重复背景?
在我的团队中,我经常看到队友在写作
list.filter(_.isInstanceOf[T]).map(_.asInstanceOf[T])
T
的实例那么我们为什么要这样明确地转换它呢?
match
.
list.match {
case thing: T => Some(thing)
case _ => None
}
最佳答案
您可以使用 collect
:
list collect {
case el: T => el
}
scala> List(10, "foo", true) collect { case el: Int => el }
res5: List[Int] = List(10)
T
, 你必须有一个隐含的
ClassTag[T]
在适用范围。
import scala.reflect.ClassTag
def filter[T: ClassTag](list: List[Any]): List[T] = list collect {
case el: T => el
}
scala> filter[Int](List(1, "foo", true))
res6: List[Int] = List(1)
scala> filter[String](List(1, "foo", true))
res7: List[String] = List(foo)
collect
需要
PartialFunction
,所以你不应该提供通用案例。
A => Option[B]
到
PartialFunction[A, B]
与
Function.unlift
.这是一个例子,同样使用
shapeless.Typeable
解决类型删除:
import shapeless.Typeable
import shapeless.syntax.typeable._
def filter[T: Typeable](list: List[Any]): List[T] =
list collect Function.unlift(_.cast[T])
scala> filter[Option[Int]](List(Some(10), Some("foo"), true))
res9: List[Option[Int]] = List(Some(10))
关于Scala:isInstanceOf 后跟 asInstanceOf,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/41182839/
这个问题已经有答案了: 已关闭12 年前。 Possible Duplicate: how to detect if variable is a string x = 'myname'; x.inta
假设,我们有: class B class A extends B trait T 那么它成立: val a: A with T = new A with T a.isInstanceOf[B] /
我对 isInstanceOf 在 Scala 中的工作方式感到困惑。如果我这样做: val x: Int = 5 x.isInstanceOf[Int] 鉴于 Scala 确实进行类型删除,JVM
我想为 isInstanceOf[T] 和 asInstanceOf[T] 对构建一个包装器,它将输出 Option[T]使用方便的 map 和 getOrElse 方法。 于是我尝试了一下,结果让我
在我的团队中,我经常看到队友在写作 list.filter(_.isInstanceOf[T]).map(_.asInstanceOf[T]) 但这对我来说似乎有点多余。 如果我们知道过滤列表中的所有
假设我有以下类层次结构: trait A; class A1 extends A; class A2 extends A 现在我需要过滤 A1 List[A] 中的实例.我使用模式匹配或 isInst
我想知道,为什么 AnyVal 不能在 isInstanceOf 检查中使用?这种行为背后的原因是什么? scala> val c = 't' c: Char = t scala> c.isInsta
我在 scala 中编写一个序列化程序,将对象(或模型)保存到数据库(用于应用程序引擎),我需要将某些字段视为特殊情况。例如,如果该字段的类型为 Array[Byte],我将其保存为一个 blob。我
我有一个函数 unlist 将任何类型的列表作为第一个参数: def unlist(xs: 列表[任何], ys: 列表[任何]): 列表[任何] = ... 我在外部列表的第一个元素上调用这个函数,
这是 REPL (scala 2.11) 中人为设计的实验: scala> class Foo[T] { | def as(x: Any) = x.asInstanceOf[T]
我有两个类:Foo 和 FooBar。 FooBar 派生自 Foo。我有一个工厂类,它根据给定的参数决定实例化和返回哪个对象。 所以我想进行单元测试来验证我的工厂类是否正常工作并返回正确的实例。 这
这只是我正在尝试实现的一种服务定位器类型的模式,我想在其中捕获将实现注册到它不属于的接口(interface)的尝试,如: public void Add(Type interfaceType, ob
为什么 isInstanceOf[T] 方法没有按预期工作? 在下面,我定义了一个 hello 类和伴随对象。在hello对象中,我在代码行“hel.typetest[Int]”中测试了this.is
我正在尝试为我的音乐播放器应用程序中的每首歌曲获取专辑封面。但是除了黑屏,没有专辑封面外,我什么也没得到。除了我从未听说过的日志猫错误之外,代码中似乎没有任何错误。 这是包含按钮单击监听器的 Java
假设我有一个 List[T],其中 E 扩展了 T。我想获取列表中的所有 E。我必须做类似的事情: val l = list filter {_.isInstanceof[E]} map {_
当使用 .isInstanceOf[GenericType[SomeOtherType]] 时,其中 GenericType 和 SomeOtherType 是任意类型(合适的类型),Scala由于类
我从原始目录读取 mp3 文件,它工作正常,但是每次启动媒体播放器时都会显示一些错误(如下所示)。 我的代码是... player1 = MediaPlayer.create(view.getCont
我正在尝试使用视频 View 在我的应用中播放视频歌曲。但是除了黑屏,我什么也没有得到,并且显示错误“无法播放视频”。除了我从未听说过的 log cat 错误之外,代码中似乎没有任何错误。 Video
我是一名优秀的程序员,十分优秀!