2011-11-22 103 views

回答

3

這只是一個約定:

obj.fun //accessing like property with no side-effects 

obj.fun() //ordinary method call, return value, but might also have side-effects 

身高:()版強調的是,這是一個方法,而不是簡單的屬性。

請注意,這只是一個約定,一種文件代碼的方式,編譯器不強制執行上述規則。

3

無功能()通常用來表示無副作用的功能,如@Tomasz指出(字符串如長度 - 就你有相同的字符串,長度是相同的)

如果定義功能沒有括號,當你調用函數,你不能使用它們:

scala> def fun = "x" 
fun: java.lang.String 

scala> fun 
res0: java.lang.String = x 

scala> fun() 
<console>:9: error: not enough arguments for method apply: (n: Int)Char in trait StringLike. 
Unspecified value parameter n. 
     fun() 
     ^

scala> def fun() = "x" 
fun:()java.lang.String 
//now you may use() or may not - it is up to you 
scala> fun 
res2: java.lang.String = x 

scala> fun() 
res3: java.lang.String = x 
7

除了是對上公約r對沒有參數的函數沒有副作用,在Scala中有'fun'和'fun()'之間的區別IS

'fun'被稱爲'無參數'函數,而'fun()'是帶有'空參數列表'的函數。

爲了使長話短說:

scala> def fun() = "x" 
fun:()java.lang.String 

scala> fun 
res0: java.lang.String = x 

scala> fun() 
res1: java.lang.String = x 

scala> def fun = "y" 
fun: java.lang.String 

scala> fun 
res2: java.lang.String = y 

scala> fun() 
<console>:9: error: not enough arguments for method apply: (index: Int)Char in class StringOps. 
Unspecified value parameter index. 
       fun() 
      ^