【问题标题】:Scala functional programming and mutabilityScala 函数式编程和可变性
【发布时间】:2021-05-26 06:47:43
【问题描述】:

假设我有以下代码:

class Pet(name: String) {
  def getName: String = {
    name match {
      case "" => generateRandomName
      case _  => name
    }
  }
}

object Pet {
  def apply(name: String) = new Pet(name)
}

创建一个空名称的Pet 将创建一个随机名称的Pet。如何保存新生成的随机名称的状态,所以调用此方法两次将返回第一次调用生成的相同名称?

val pet = Pet("")

// Let's say this prints "bob"
println(pet.getName)

// I want this to still print "bob". This would generate a new random name because the state isn't saved from the previous call. 
println(pet.getName) 

我想避免使用var,因为它被认为是不好的做法——你如何去做这样的事情?是创建类的新副本的最佳方式吗?这对我来说似乎不是很有效

【问题讨论】:

    标签: scala functional-programming


    【解决方案1】:

    在构造函数中使用默认值,你可以做这样的事情......

    class Pet(name: String = generateRandomName) {
      def getName: String = name
    }
    

    那么当你这样做时......

    val pet = new Pet()
    

    ...getName 将始终返回相同的生成名称,但这...

    val pet = new Pet("")
    

    ...将name 填充为空的String

    【讨论】:

      猜你喜欢
      • 1970-01-01
      • 2021-08-23
      • 2016-05-12
      • 2011-05-07
      • 1970-01-01
      • 1970-01-01
      • 2017-04-16
      • 2010-09-06
      • 2011-10-23
      相关资源
      最近更新 更多