【发布时间】:2014-11-22 23:24:20
【问题描述】:
我正在开发一个映射器,想要一种类型安全的方法来捕获类字段名以进行映射,并使用我在 C# 中使用的语法:
case class Person(name: String, age: Int)
new Mapping[Person]() {
field(_.age).name("person_age").colType[java.lang.Integer]
field(_.name).name("person_name")
}
在哪里def field(m: T => Unit): FieldMap
这会触发以下警告:
Warning:(97, 13) a pure expression does nothing in statement position; you may be omitting necessary parentheses
field(_.age).name("person_age").colType[java.lang.Integer]
^
Warning:(98, 13) a pure expression does nothing in statement position; you may be omitting necessary parentheses
field(_.name).name("person_name")
^
很明显,这不是一个理想的语法。有什么方法可以调整 field 的签名以避免警告,还是有更惯用的 scala 方式以类型安全的方式映射字段?
注意: @sjrd 的回答确实消除了警告,但尝试的功能似乎并不适用于 scala 反射。我的最终目标是一个 Mapper,它允许以编译时检查的方式指定 T 成员,而不是字符串,因此它不太容易受到拼写错误和重构问题的影响。
【问题讨论】:
标签: scala reflection