gpt4 book ai didi

斯卡拉 : Collect with generics

转载 作者:行者123 更新时间:2023-12-05 02:18:37 24 4
gpt4 key购买 nike

给定以下场景

val items = List("a", "b", "c", 1, 2, 3, false, true)
def intItems = items.collect {case i : Int => i}
def stringItems = items.collect {case s : String => s}

有没有办法创建一个通用函数来处理这种行为?

我尝试了以下方法

def itemsAs[T]: List[T] = items.collect { case item: T => item } 

但是

itemsAs[Int] 

返回

List[Int]] = List(a, b, c, 1, 2, 3, false, true)

另一种方法是提供部分函数作为参数,但仍然需要复制case i: Int => icase s: String = > s。有没有办法让它更紧凑?谢谢

最佳答案

val items = List("a", "b", "c", 1, 2, 3, false, true)
import scala.reflect.ClassTag
def collect[T: ClassTag] = items.collect { case x: T => x }
collect[Int] // List(1, 2, 3)
collect[String] // List(a, b, c)

参见 http://docs.scala-lang.org/overviews/reflection/typetags-manifests.html了解更多详情。

关于斯卡拉 : Collect with generics,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/44797420/

24 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com