Nested Functions

(嵌套函數(shù))Nested Functions

根據(jù)let表達式:let b1 b2 … bn in e end的使用規(guī)則,我們在其中定義任意綁定,包括function綁定,這是一種好的編程風(fēng)格。

實例

fun count (from : int, to : int) = 
  if from = to
  then to :: []
  else from :: cout(from+1, to)
fun countup_from0(x : int) = 
  count(1, x)

我們不想對外暴露輔助函數(shù)、或困擾別人時,我們就需要使用let以實現(xiàn)嵌套函數(shù)

fun countup_from1 (x : int) =
  let fun count (from : int, to : int) =
    if from = to
    then to :: []
    else from :: count(from+1,to)
  in
    count (1,x)
  end

更好的版本:
fun countup_from1_better (x : int) =
  let fun count (from : int) =
    if from = x
    then x :: []
    else from :: count(from+1)
  in
    count 1
  end

通過上面的例子,我們可以知道,嵌套函數(shù)可以使用其外層環(huán)境已定義的綁定,如:參數(shù)、在let表達式內(nèi)早于函數(shù)定義的綁定。

編程風(fēng)格

在函數(shù)內(nèi)部定義輔助函數(shù)是一種良好的編程風(fēng)格,如果輔助函數(shù):

  • 輔助函數(shù)在其他地方不太可能會使用到
  • 在其他地方可能會被濫用
  • 以后可能被更改或刪除

代碼設(shè)計中的一個基本權(quán)衡:重用代碼可以節(jié)約時間和精力,并且可以避免一些錯誤,但是同時它也會導(dǎo)致重用的代碼在以后難以更改。

?著作權(quán)歸作者所有,轉(zhuǎn)載或內(nèi)容合作請聯(lián)系作者
【社區(qū)內(nèi)容提示】社區(qū)部分內(nèi)容疑似由AI輔助生成,瀏覽時請結(jié)合常識與多方信息審慎甄別。
平臺聲明:文章內(nèi)容(如有圖片或視頻亦包括在內(nèi))由作者上傳并發(fā)布,文章內(nèi)容僅代表作者本人觀點,簡書系信息發(fā)布平臺,僅提供信息存儲服務(wù)。

友情鏈接更多精彩內(nèi)容