簡體   English   中英

Scala列表打印問題 - IntelliJ IDEA

[英]Scala list print issue — IntelliJ IDEA

我有以下代碼

object DispatchLibrary
{
  private var nodes = Map.empty[java.util.UUID, List[BigInt]]

  def addNode(uuid: java.util.UUID) = if(nodes contains uuid) nodes else (nodes += (uuid -> Nil))

  def addValue(uuid: java.util.UUID, value: BigInt) = nodes + (uuid -> (value :: (nodes get uuid getOrElse Nil)))

  //def getValue(uuid: java.util.UUID) : List[BigInt] = ???

  //def getValues() : List[BigInt] = ???

  def calculated(): Boolean = !nodes.exists(_._1 eq null)

  def main(args: Array[String]) : Unit =
  {
    val uuid = java.util.UUID.randomUUID()

    addNode(uuid)
    addValue(uuid, BigInt(999))
    addValue(uuid, BigInt(9999))

    nodes foreach {case (key, value) => println (key + "->" + value)}
  }
}

在IntelliJ IDEA中運行上面的代碼給出了類似於以下輸出的內容

8b2b4a7b-3e65-4de0-9035-8ee1d2910983->List()

我不確定為什么列表沒有打印。

從REPL運行類似的代碼可以得到預期的輸出

scala> var nodes = Map.empty[Int, List[BigInt]]
nodes: scala.collection.immutable.Map[Int,List[BigInt]] = Map()

scala> nodes += (1->Nil)

scala> nodes += (1 -> (BigInt(999) :: (nodes get 1 getOrElse Nil)))

scala> nodes += (1 -> (BigInt(9999) :: (nodes get 1 getOrElse Nil)))

scala> nodes foreach {case (key, value) => println (key + "-->" + value )}
1-->List(9999, 999)

如果你能幫我寫評論方法,我將不勝感激。

在你的addValue方法中你編寫nodes + (uuid -> (value :: (nodes get uuid getOrElse Nil)))這不會改變nodes的列表,但只創建一個添加了值的新副本。 由於默認情況下Map是不可變的,因此您必須像在addNode方法中使用= -sign一樣存儲它。

它打印任何東西的原因是因為第一個條目包含UUID(String)和Nil(空List)。 “8b2b4a7b-3e65-4de0-9035-8ee1d2910983”之所以有意義,是因為它是UUID。 “List()”是打印Nil的結果(因為它是一個空列表)。

你有它。 嘗試在addValue中編寫node += ...

暫無
暫無

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

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