0
/** A lazy cons cell, from which streams are built. */
  @SerialVersionUID(-602202424901551803L)
  final class Cons[+A](hd: A, tl: => Stream[A]) extends Stream[A] with Serializable {
    override def isEmpty = false
    override def head = hd
    @volatile private[this] var tlVal: Stream[A] = _
    def tailDefined: Boolean = tlVal ne null
    override def tail: Stream[A] = {
      if (!tailDefined)
        synchronized {
          if (!tailDefined) tlVal = tl
        }

      tlVal
    }
  }

でワイルドカードは何_を表し@volatile private[this] var tlVal: Stream[A] = _ますか?

4

1 に答える 1

2

ワイルドカードは、デフォルト値を に割り当てますvar。これにより、変数が初期化され、使用できるようになります。私の知る限り、それはsの「デフォルト」値(数値、など)nullから派生するものすべてになります。AnyRefAnyVal0falseBoolean

宣言はできませんが、未定義のローカル変数です。例はボリュームを話します:

scala> var a : Int = _
a: Int = 0

scala> var b : String = _
b: String = null

scala> var bool : Boolean = _
bool: Boolean = false

scala> var c : Long
<console>:7: error: only classes can have declared but undefined members
(Note that variables need to be initialized to be defined)
       var c : Long
于 2013-10-25T21:02:24.970 に答える