1
class Account {
    val id = Account.newUniqueNumber()
    private var balance = 0.0
    def deposit(amount: Double) { balance += amount }
}

object Account {
    private var lastNumber = 0
    private def newUniqueNumber() {
        lastNumber += 1; lastNumber
    }
}

var a1 = new Account()
var a2 = new Account()
println(a1.id)
println(a2.id)

~/myScala % scala -version
Scala code runner version 2.9.1 -- Copyright 2002-2011, LAMP/EPFL
~/myScala % scala Account.scala
()
()
~/myScala %

出力として 1,2 を期待していました... 私の理由は...
1. 新しい Account オブジェクトが構築されます
2. id フィールドの初期化中に、コンパニオン オブジェクトが構築されます (1 回だけ)

したがって、newUniqueNumber() 呼び出しは 1 と 2 を返すはずです...

ポインタはありますか?

ありがとう..

4

1 に答える 1

6

メソッドnewUniqueNumberは何かを返す必要があるため、署名に等号を追加する必要があります。

private def newUniqueNumber() = {
  lastNumber += 1
  lastNumber
}

Unitそれがなければ、 Java に似たものを返し、voidとして出力され()ます。

于 2012-12-25T09:53:54.830 に答える