首页
学习
活动
专区
圈层
工具
发布
首页
学习
活动
专区
圈层
工具
MCP广场
社区首页 >问答首页 >Scala 3宏创建枚举

Scala 3宏创建枚举
EN

Stack Overflow用户
提问于 2021-09-17 18:01:03
回答 1查看 258关注 0票数 1

我想知道是否有可能在Scala 3中编写一个宏,该宏接受一组字符串并将其转换为枚举类型,并以这些字符串为例?

例如,我想编写一个具有从输入元素生成的内部类型的类:

代码语言:javascript
运行
复制
import scala.quoted.*

class Example(myEnumElements:Seq[String]) {
  
  inline def buildEnum(inline elts:Seq[String]): Unit = ${ buildEnumType('elts) }

  def buildEnumType(e: Expr[Seq[String]])(using Quotes, Type[Seq]): Expr[Unit] = '{
    enum MyEnum:
      ???
  }
}
...
// Possibly in another file?

val example = Example(Seq("A","B","C"))

def someConvenienceFunction(e:example.MyEnum) = e match
  case A => "apple"
  case B => "banana"
  case C => "cranberry"
...
// Possibly in another file?

someConvenienceFunction(example.A)  // "apple"
someConvenienceFunction(example.D)  // compile error
EN

回答 1

Stack Overflow用户

回答已采纳

发布于 2021-09-25 19:40:54

Scala 3宏目前仅为def宏。它们不用于生成类、枚举等。即使在buildEnumType中定义枚举,也只能在buildEnum调用扩展到的块{...}中看到。

尝试使用代码生成代替。

How to generate a class in Dotty with macro?

https://users.scala-lang.org/t/macro-annotations-replacement-in-scala-3/7374

How to create variables with macros in Scala (Scala 2)

Resolving variables in scope modified by Scala macro (Scala 2)

票数 1
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/69227772

复制
相关文章

相似问题

领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档