2017-05-26 76 views
2

我想寫一段簡短的scala代碼來理解無括號的方法和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 getAgeperson.getAge,程序將正常運行。
那麼爲什麼函數調用person getAge失敗?

回答

4

應謹慎使用Postfix符號 - 請參見infix notationpostfix notationhere節。如果追加;val tomAge = person getAge

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.

您的代碼就可以了(用編譯器警告)。

+0

這是一個神奇的解釋!感謝分享,我看了你分享的文檔,非常有幫助! –

+0

謝謝,@Damian Lattenero。這是一個相當棘手的「異常」。如果下面的'println'代碼行沒有引用'tomAge',那麼錯誤消息'error:Int不接受參數'會更有啓發性。 –

+0

我試圖在網頁編輯器中找到它,並且您只是發表評論,並且它很棒 –

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

您的代碼不起作用,因爲您需要添加「;」在中綴操作中!

我嘗試了你的例子here,工作得很好!

See this answer,接受的答案顯示另一個例子

+0

明白了,謝謝! –

+0

@長大李!太棒了!沒問題,我一直都很喜歡幫忙,當我回答其他朋友的回答時,第一哈哈哈,但很好...無論如何,很高興幫助 –