我想创建这种scala列表:
List(("Att1", getAtt1(), Int),
("Att2", getAtt2(), BigDecimal),
("Att3", getAtt3(), Long))
getAtt1,getAtt2和getAtt3来自Scala中导入的Java对象。我使用列表的第三个参数来了解转换。例如,getAtt3()返回一个Int,我的List告诉我需要将它转换为Long。
我使用Scala 2.11.8。
你有什么想法吗?
答案 0 :(得分:2)
您确实可以像评论中提到的那样使用类来解决此问题。我去了一个有2种类型参数和转换方法的课程。像这样:
> case class Attribute[Original, Target](name: String, value: () => Original)(converter: Original => Target) {
def convert = converter(value())
}
defined class Attribute
> Attribute("three", () => 3)(_.toLong).convert
res11: Long = 3L
请注意我已将案例类的converter
参数分隔为自己的参数块。这是Scala中常用的帮助类型推断的技巧。现在,您可以将Int
到Long
的转换定义为_.toLong
。如果您将converter
放入相同的参数块,则必须在实例创建期间指定完整类型签名:Attribute("", () => 3, (i: Int) => i.toLong)
。