如何创建方法列表并在scala中键入

时间:2017-07-13 09:27:54

标签: scala

我想创建这种scala列表:

List(("Att1", getAtt1(), Int),
     ("Att2", getAtt2(), BigDecimal),
     ("Att3", getAtt3(), Long))

getAtt1,getAtt2和getAtt3来自Scala中导入的Java对象。我使用列表的第三个参数来了解转换。例如,getAtt3()返回一个Int,我的List告诉我需要将它转换为Long。

我使用Scala 2.11.8。

你有什么想法吗?

1 个答案:

答案 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中常用的帮助类型推断的技巧。现在,您可以将IntLong的转换定义为_.toLong。如果您将converter放入相同的参数块,则必须在实例创建期间指定完整类型签名:Attribute("", () => 3, (i: Int) => i.toLong)