You need to enable JavaScript to run this app.
优惠活动
大模型
产品
解决方案
定价
更多

Scala 3.7的asType匹配代码在3.3.6 LTS中的替代方案咨询

Scala 3.3.6 替代 Scala 3.7 类型匹配代码的实现

原Scala 3.7代码用于在宏中检查目标类型是否为S的子类型,匹配成功后生成apply[t]表达式,否则抛出错误。在Scala 3.3.6中可通过以下方式替代实现:

import scala.quoted.*

def macroImpl[S: Type](x: TypeRepr)(using Quotes): Expr[Any] = {
  val sType = TypeRepr.of[S]
  if x <:< sType then
    x.asType match
      case '[t] => '{ apply[t] }.asExprOf[Any]
  else
    quotes.report.errorAndAbort(
      s"Expected $x to be a sub-type of $sType",
      quotes.reflect.Position.ofMacroExpansion
    )
}

关键差异说明

  • Scala 3.3.6不支持'[type t <: S; t]这种带类型约束的模式匹配语法,需先通过x <:< sType手动执行子类型检查
  • 检查通过后,再通过x.asType匹配出具体类型t,后续生成表达式的逻辑与原代码一致
  • 宏上下文的report和Position需通过quotes实例访问,要确保隐式Quotes参数存在

内容的提问来源于stack exchange,提问作者Andriy Plokhotnyuk

相关产品推荐
方舟 Agent Plan

超全模态模型 × Harness 升级,最新支持 Deepseek-V4.1-Flash、GLM-5.3 系列、Doubao-Seedream-5.0-pro、Kimi-K3 (部分), 限时 9.9 元起

最近更新时间:2026.06.13 01:18:09