Jos*_*iga 3 scala ecmascript-6
在ES6中,我们可以将对象的字段称为:
seller['firstname']
Run Code Online (Sandbox Code Playgroud)
代表
seller.firstname
Run Code Online (Sandbox Code Playgroud)
有没有办法在Scala中做同样的事情?我的意思是,使用字符串来引用对象字段?
使用Scala 2.13,您应该能够通过使用案例类的新productElementNames方法(在其字段名称上返回迭代器)来做更多或更少的事情。
通过用获得的字段值压缩字段名称,productIterator我们可以使用字段名称的字符串版本来访问案例类字段值:
implicit class CaseClassExtensions(obj: Product) {
def select[T](field: String): Option[T] =
(obj.productElementNames zip obj.productIterator)
.collectFirst { case (`field`, value) => value.asInstanceOf[T] }
}
Run Code Online (Sandbox Code Playgroud)
implicit class CaseClassExtensions(obj: Product) {
def select[T](field: String): Option[T] =
(obj.productElementNames zip obj.productIterator)
.collectFirst { case (`field`, value) => value.asInstanceOf[T] }
}
Run Code Online (Sandbox Code Playgroud)
在这里,隐式类用于丰富Product类型(这是case类的继承类型),以便select在任何case类上调用此方法。
但是与您在Java语言中习惯的相反:
Option的值(或者,当您尝试获取未定义的字段的值时,您必须处理异常)。| 归档时间: |
|
| 查看次数: |
98 次 |
| 最近记录: |