這裏有兩個方法聲明:Scala中有趣和有趣()有什麼區別?
def fun = "x"
def fun() = "x"
,因爲它們都需要不帶任何參數,並返回一個字符串,什麼是除了調用的方式有什麼區別?
這裏有兩個方法聲明:Scala中有趣和有趣()有什麼區別?
def fun = "x"
def fun() = "x"
,因爲它們都需要不帶任何參數,並返回一個字符串,什麼是除了調用的方式有什麼區別?
這只是一個約定:
obj.fun //accessing like property with no side-effects
obj.fun() //ordinary method call, return value, but might also have side-effects
身高:()
版強調的是,這是一個方法,而不是簡單的屬性。
請注意,這只是一個約定,一種文件代碼的方式,編譯器不強制執行上述規則。
無功能()通常用來表示無副作用的功能,如@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
(附錄)您可以在這裏找到了「純VS副作用」約定:Scala Style Guide第3.4.2章
除了是對上公約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()
^