0

想想这样的案例类:

case class User(firstname: String, lastname: String)

check现在想想用名字调用一个方法

check(User.firstname)

问题是,该方法check也必须具有该字段的名称。它必须有 fieldname 和 fieldvalue -> "firstname" 和 "John"

问题是,是否可以传递类的字段而不是样式中的值check(User.firstname)

我认为检查可能看起来像这样(preudocode):

def check(fieldName: String, fieldValue: Any) = {
    println(fieldName + ": " + fieldValue)
}

或这个

def check(field: Field) = {
    println(field.getName)
}

我可以手动将字段名作为字符串传递,但问题是,如果我重构字段名并且它必须匹配,则字符串不会改变。

也许宏可以帮助?还有其他解决方案吗?

4

2 回答 2

1

首先在这里输入链接描述我假设检查方法总是返回相同的类型(Unit\String),否则你需要使用泛型。二、可以使用Enums进行映射

myEnum match {
  case MyEnum.firstname => myObj.firstname
  case MyEnum.lastname =>myObj.lastname 
  case _ => ....

}

如果您不想使用枚举,则必须使用 scala 反射。 Scala 2.10反射,如何从案例类中提取字段值

于 2013-08-20T12:41:03.690 回答
0

如果在编译时知道字段名,则可以使用宏。否则,您可以使用运行时反射。因此运行时反射为您提供了更大的灵活性,而宏为您提供了更好的性能和编译时安全性。

于 2014-01-26T09:36:00.000 回答