gpt4 book ai didi

scala - Scala中通用类型的模式匹配

转载 作者:行者123 更新时间:2023-12-03 12:14:43 24 4
gpt4 key购买 nike

我有看起来像这样的scala函数:

现在,根据T的类型(在我的情况下,可以是DoubleBooleanLocalDate),
我需要在ob上应用函数。这样的事情(我知道代码没有意义,但是我试图传达我的意思):

def X[T](ob: Observable[T]): Observable[T] = {
//code
T match {
case Double => DoSomething1(ob:Observable[Double]):Observable[Double]
case Boolean => DoSomething2(ob:Observable[Boolean]):Observable[Boolean]
case LocalDate => DoSomething3(ob:Observable[LocalDate]):Observable[LocalDate]
}
}

考虑到Scala的Erasure属性,可以使用反射来完成工作吗?可能吗

最佳答案

如果您使用的是2.10+,我会选择TypeTag

import reflect.runtime.universe._

class Observable[Foo]

def X[T: TypeTag](ob: Observable[T]) = ob match {
case x if typeOf[T] <:< typeOf[Double] => println("Double obs")
case x if typeOf[T] <:< typeOf[Boolean] => println("Boolean obs")
case x if typeOf[T] <:< typeOf[Int] => println("Int obs")
}

X(new Observable[Int])
// Int obs

另请参阅 this lengthy, but awesome answer

还要注意,我只是瞥了一眼scala反射,所以可能有人可能会写一个更好的TypeTag使用示例。

关于scala - Scala中通用类型的模式匹配,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/21285235/

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