gpt4 book ai didi

scala - _= :=typeOf[_] tests in Scala macros 链的模式匹配语法替代方案

转载 作者:行者123 更新时间:2023-12-04 04:39:36 25 4
gpt4 key购买 nike

是否已经有一个模式匹配替代方案来编写冗长的测试,比如

if (aTpe =:= typeOf[Int]) 1
else if (aTpe =:= typeOf[Long]) 2
else if (aTpe =:= typeOf[Double]) 3
else ...

也许看起来有点像的东西
aTpe match {
case tpe[Int] => 1
case tpe[Long] => 2
case tpe[Doble] => 3
...
}

为此编写一个提取器看起来很容易,但我想知道是否还没有这样的东西。

最佳答案

当然,可以使用模式匹配和守卫以几乎相同的方式编写 if-else-chain:

scala> import scala.reflect.runtime.universe._
import scala.reflect.runtime.universe._

scala> def f[A : TypeTag] = typeOf[A] match {
case t if t =:= typeOf[Int] => 1
case t if t =:= typeOf[Long] => 2
case _ => 0
}
f: [A](implicit evidence$1: reflect.runtime.universe.TypeTag[A])Int

scala> f[Int]
res5: Int = 1

scala> f[String]
res6: Int = 0

然而,像 case tpe[Int] => 这样的构造由于这张票,如您的问题所示是不可能的: SI-884 - 这只是一个未实现的功能。

关于scala - _= :=typeOf[_] tests in Scala macros 链的模式匹配语法替代方案,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/19104601/

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