【问题标题】:how to copy a class inside of a state?如何在一个州内复制一个类?
【发布时间】:2020-06-28 05:58:28
【问题描述】:

如果 State 中的所有 val 都是基本数据类型,那就很简单了。如果我们想在其中复制一个特定的值,那就是

copy(specificValue = newValue)

但是如果这个特定的值在一个类里面呢?这是我尝试过但无济于事的方法

copy(specificClass.specificValue = newValue)

我应该改为在外面创建/复制这个类,然后让它像下面这样吗?

copy(specificClass = newClass)

【问题讨论】:

    标签: scala copy lagom


    【解决方案1】:

    如果你有

    
    case class Address(street: String, city: String)
    case class User(address: Address, name: String)
    
    val u = User(...)
    
    //to change the city to something else you would do
    
    val another = u.copy(address = u.address.copy(city = "New York") 
    
    

    这很麻烦。我建议使用quicklens 库,它允许您编写:

    
     import com.softwaremill.quicklens._
    
     val another = u.modify(_.address.city).setTo("New York")
    

    【讨论】:

      【解决方案2】:

      这是一个名为quicklens的项目

      import com.softwaremill.quicklens._
      
      case class Street(name: String)
      case class Address(street: Street)
      case class Person(address: Address, age: Int)
      
      val person = Person(Address(Street("1 Functional Rd.")), 35)
      
      val p2 = person.modify(_.address.street.name).using(_.toUpperCase)
      val p3 = person.modify(_.address.street.name).setTo("3 OO Ln.")
      
      // or
      
      val p4 = modify(person)(_.address.street.name).using(_.toUpperCase)
      val p5 = modify(person)(_.address.street.name).setTo("3 OO Ln.")
      

      【讨论】:

        猜你喜欢
        • 1970-01-01
        • 1970-01-01
        • 2018-07-19
        • 1970-01-01
        • 1970-01-01
        • 1970-01-01
        • 1970-01-01
        • 2012-01-16
        • 1970-01-01
        相关资源
        最近更新 更多