gpt4 book ai didi

scala - 在 Scala 中使用字符串识别对象字段

转载 作者:行者123 更新时间:2023-12-01 08:45:02 25 4
gpt4 key购买 nike

ES6 我们可以将对象的字段称为:

seller['firstname']  

代表
seller.firstname

有没有办法在 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] }
}

// case class Seller(firstName: String, lastName: String)
Seller("Hello", "World").select[String]("firstName")
// Option[String] = Some(Hello)

这里使用隐式类来丰富 Product类型(这是 case 类继承类型)以调用此 select任何案例类上的方法。

但与您在 Javascript 中习惯的相反:
  • 这仅限于案例类。
  • 这将返回 Option值(或者在尝试获取未定义字段的值时必须处理异常)。
  • 您必须指定关联值的返回类型。
  • 关于scala - 在 Scala 中使用字符串识别对象字段,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/56401399/

    25 4 0
    Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
    广告合作:1813099741@qq.com 6ren.com