2017-02-09 5 views
-1

私はScalaを学習しています。以下のコードを実行しています。何も返さない関数はスカラのプロシージャですが、コードの下にextra()が出力されます。ここでは、私はちょうど '値'の値を印刷しています。 誰かがこれについて説明できますか?Scalaのプロシージャとファンクションの違い

class Sample{ 
    private var value = 1 
    def test() {value += 2; println(value)} 
    def test2() = value 
} 

object Main2 extends App { 
    val my_counter = new Sample() 
    println(my_counter.test()) 
    println(my_counter.test2()) 

} 

3 
() 
3 
+1

最初は廃止予定です。 – ipoteka

答えて

2

いわゆる「プロシージャの構文は、」(あなたはJavaでvoidを呼ぶもの)Unitを返すメソッドのためだけに、「シンタックスシュガー」です。

def sayHello(toWhom: String) { 
    println(s"hello $toWhom") 
} 

と意味的に等価な(実際に翻訳される):

def sayHello(toWhom: String): Unit = { 
    println(s"hello $toWhom") 
} 

注意明示的な型と右メソッドシグネチャ後等号。

タイプUnitには、()と書かれた単一の値があります(読み込み単位はタイプと同じです)。それはあなたが見るものです:方法testvalueを印刷し、タイプUnit()を生成します。その後、画面自体に印刷します。

コメントに記載されているように、「手続き構文」は非推奨であり、将来のバージョンの言語では削除される予定です。

2

プロシージャ構文は、unitを戻すメソッドにコンパイルされます。 Unit上のtoStringを呼び出し

は、あなたが(Unitある)テストの結果をプリントアウトしているので、あなたは出力にその文字列表現、()を参照してください"()"

を生成します。

関連する問題