2017-05-26 22 views
2

私はカッコ無しのメソッドとpostfixOpsを理解するために、スカラコードの短いスニペットを書こうとしています。ここで
が私のコードです:scala:エラー:再帰的な値が必要です

import scala.language.postfixOps 

object Parentheses { 
    def main(args: Array[String]) { 
     val person = new Person("Tom", 10); 
     val tomAge = person getAge 
     println(tomAge) 
    } 


    class Person(val name: String, val age: Int) { 
     def getAge = { 
      age 
     } 
    } 

} 

それをコンパイルしながら、しかし、私は問題があると言う:

error: recursive value tomAge needs type 
     println(tomAge) 

私はperson.getAgeへのメソッド呼び出しperson getAgeを交換した場合、プログラムが正しく実行されます。
person getAgeの関数呼び出しが失敗したのはなぜですか?

答えて

4

ポストフィックス表記は、慎重に使用してください。infix notationおよびpostfix notationhereを参照してください。

This style is unsafe, and should not be used. Since semicolons are optional, the compiler will attempt to treat it as an infix method if it can, potentially taking a term from the next line.

あなたはval tomAge = person getAge;を追加する場合はあなたのコードは、(コンパイラの警告で)動作します。

+0

これはすばらしい説明です!共有していただきありがとうございます、私は共有している医者を見て、とても助かりました! –

+0

ありがとう、@Damian Lattenero。これはややこしい "異常"です。次の 'println'コード行が' tomAge'を参照していなかった場合、 'error:Intはパラメータを取らない'というエラーメッセージはもう少し啓示されていました。 –

+0

私はWebコンパイラでそれを見つけようとしていましたが、あなたはただコメントしてくれました。それは素晴らしいことでした。 –

0
def main(args: Array[String]) { 
    val person = new Person("Tom", 10); 
    val tomAge = person getAge; /////////// 
    println(tomAge) 
} 

";"を追加する必要があるため、コードは機能しません。中断操作で!

私はあなたの例を試してhereとうまくいった!

See this answer、回答は別の例を示します

+0

ありがとうございました! –

+0

@Changada Li!素晴らしい!私はいつも助けてくれることを愛してきました。私は他の仲間が最初にハハに答えたと答えましたが、とにかく助けてくれてうれしいです。 –

関連する問題