【问题标题】:Convert tuple to case class with default values将元组转换为具有默认值的案例类
【发布时间】:2020-02-11 15:52:08
【问题描述】:
case class Person(first: String, last: String, full: String = "blah")

val one = Person("Rachel","Green")
// one: Person = Person(Rachel,Green,blah)

val tuple1 = ("Ross","Geller")
// tuple1: (String, String) = (Ross,Geller)

Person tupled tuple1
// <console>:15: error: type mismatch;  found : (String, String)  required: (String, String, String

我想将 Tuple13 转换为具有默认值的案例类。

【问题讨论】:

  • 遗憾的是,一个 函数 不能有像 methods 这样的默认值。

标签: scala tuples case-class


【解决方案1】:

尝试在伴侣中提供apply 工厂方法

object Person {
  def apply(t: (String, String)): Person = Person(t._1, t._2)
}
Person(tuple1)   // res2: Person = Person(Ross,Geller,blah)

或者可能是隐式转换

implicit def tupledWithDefaults(t: (String, String)) = (t._1, t._2, Person.$lessinit$greater$default$3)
Person.tupled(tuple1)   // res2: Person = Person(Ross,Geller,blah)

看起来很奇怪的$lessinit$greater$default$3 是一种基于Scala extra no-arg constructor plus default constructor parameters 访问默认值的hacky 方式

【讨论】:

  • 元组有 13 个字段,这可能看起来很难看。但是感谢您建议 $lessinit$greater$default$3
猜你喜欢
  • 2013-05-27
  • 2021-08-28
  • 1970-01-01
  • 2012-05-07
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
相关资源
最近更新 更多