簡體   English   中英

Scala 函數式編程和可變性

[英]Scala functional programming and mutability

假設我有以下代碼:

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

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

創建一個名稱為空的Pet會創建一個具有隨機名稱的Pet 我將如何保存新生成的隨機名稱的 state,因此兩次調用此方法將返回第一次調用生成的相同名稱?

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 ,因為它被認為是不好的做法 - 你如何 go 做這樣的事情? 是創建 class 的新副本的最佳方法嗎? 這對我來說似乎不是很有效

在構造函數中使用默認值,你可以做這樣的事情......

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

那么當你這樣做時......

val pet = new Pet()

... getName將始終返回相同的生成名稱,但這...

val pet = new Pet("")

...將name填充為空String

暫無
暫無

聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.

 
粵ICP備18138465號  © 2020-2024 STACKOOM.COM