Scala 宏/天堂案例类应用方法

问题描述 投票:0回答:0

我正在研究 Scala 2.12.17.

假设我有一堆案例类:

case class TestOne(one: String)
case class TestTwo(one: String, two: String)
case class TestThree(one: String, two: String, three: String)

我也有这些类型:

  trait Data{
    val a: Int
  }
  
  case class DoubleInt(a: Int, b: Int) extends Data
  case class SingleInt(a: Int) extends Data

以及将

Data
对象转换为
String
的函数:

  def loadData(input: Data): String = {
    input.a.toString
  }

我期待的是将

Data
对象传递给我的案例类的 apply 方法,然后 apply 方法将使用
loadData
函数来将每个传递的
Data
对象转换为
String
到创建我的案例类的实例。例如:

val dataOne: Data = SingleInt(1)
val dataTwo: Data = DoubleInt(1, 2)

val testOne = TestOne(dataOne)
val testTwo = TestTwo(dataOne, dataTwo)
val testThree = TestOne(dataOne, dataTwo, dataOne)

基本上,

TestOne
apply
方法是:

def apply(one: Data): TestOne = {
  new TestOne(loadData(one))
}

TestTwo
apply
方法是:

def apply(one: Data, two: Data): TestTwo= {
  new TestTwo(loadData(one), loadData(two))
}

有没有办法在编译时以编程方式生成这些应用方法?

我认为宏或天堂注释对这个用例很有用,但我对这些主题太缺乏经验,甚至不知道从哪里开始:/

scala annotations scala-macros scala-macro-paradise
© www.soinside.com 2019 - 2024. All rights reserved.