在scala中,方法是可以巢狀的,及可以在乙個方法的方法體中定義其他方法。當我們將乙個很長的方法重構成為幾個更小的方法時,並且這些方法只在該方法中呼叫,就可以使用巢狀方法。這樣的好處是定義的小的輔助方法對外界是不可見的。
以下**實現了乙個階乘演算法,採用了切套方法完成計算:
def
factorial
(i:int):long=
fac(i , 1)
}
在上述**中,我們在factorial定義了巢狀函式fact,並且由fact實現遞迴邏輯。fact函式只在factorial作用域範圍有效,超出該範圍,將無法使用fact函式。
對於上述**,我們需要注意以下兩點:
1. 在演示**中,我們兩次用i作為引數,第一次在factorial的方法的引數,第二次是在fact方法引數中。在這種情況中,是由內部巢狀函式遮蔽外部函式引數,即在本例中,內部fact的i引數將遮蔽外層factorial的i引數。
2. 對於一般函式或者方法定義,我們不需要定義返回值型別,scala會根據實際返回內容進行型別推導。但是由一種特殊情況。即遞迴呼叫。因為在scala中,採用的是區域性作用域型別推斷,無法推斷出遞迴函式的返回型別。
巢狀方法定義與呼叫
def toggle def toggle subsequent times end first time end irb toggle first time toggle subsequent times toggle subsequent times 外圍的toggle方法內定義了兩個操作,一是...
scala函式定義的幾種方法
scala看了有幾天了,也試著寫了 hello world 今天試著練習伴生物件的時候,突然搞不明白scala伴生物件中定義的函式,並不能按我的想法工作。scala真是個非常靈活的語言,這裡還是總結下函式定義的幾種情況吧。1 規規矩矩的寫法,帶有等號 大括號和返回值型別的形式 def myfunc ...
Scala方法與函式的區別
1.函式在scala語言中,是函式程式設計的 頭等公民 2.方法是 scala 物件導向中的概念,主要定義在類,特質,抽象類中 3.函式是乙個物件,方法本質就是類中的乙個普通的方法 4.函式可以作為引數進行傳遞,可以作為返回值返回,但是方法不行 5.方法可以通過一定的語法轉成函式 def eat 將...