從閱讀:OCaml的參數名
標籤的參數往往是相同 他們的變量名。 OCaml提供了這種情況的簡寫。以下是 相當於:
let f ~name1:name2 ~name2:name2 = name1+name2 let f ~name1 ~name2 = name1 + name2
當我把在第一線我得到這個錯誤
Error: Unbound value name1
Hint: Did you mean name2?
我不明白他們怎麼是等價的,如果第一行不一個有效的功能。
從閱讀:OCaml的參數名
標籤的參數往往是相同 他們的變量名。 OCaml提供了這種情況的簡寫。以下是 相當於:
let f ~name1:name2 ~name2:name2 = name1+name2 let f ~name1 ~name2 = name1 + name2
當我把在第一線我得到這個錯誤
Error: Unbound value name1
Hint: Did you mean name2?
我不明白他們怎麼是等價的,如果第一行不一個有效的功能。
syntax of function arguments允許不同的表達式。
鑑於計算結果爲函數f
表達式expr
,下面的語法被允許的規則如下:
expr arg
(給出的表達式arg
):評價arg
爲一個值v
;結果的f
值與參數評價v
expr ~lbl
(給定一個名爲lbl
值):僅在f
具有類型lbl:a -> b
對於某些類型的a
和b
,結果是f ~lbl
與參數計算的值a
; OR,當f
的類型爲?lbl:a -> b
(然後,lbl
必須具有用於類型檢查的類型a
)。
expr ~lbl:arg
(給出的表達式arg
):這是在同樣的事情let lbl = arg in exp ~lbl
(不同之處在於expr
和arg
評價順序是不確定的)。
expr ?lbl
(給定一個名爲lbl
值):僅在f
具有類型?lbl:a -> b
對於某些類型的a
和b
,結果是f ~lbl
與參數a
計算的值; lbl
必須有類型a option
進行類型檢查。這主要出現在將可選參數從一個函數轉發到另一個函數時。
expr ?lbl:arg
(給出的表達式arg
):這是在同樣的事情let lbl = arg in exp ?lbl
(不同之處在於expr
和arg
評價順序是不確定的)。
第一行'='的RHS中的變量'name1'沒有定義。我認爲這是〜name1的一個錯字:name2。第一行應該讓f〜name1:name1〜name2:name2 = name1 + name2 –
它來自http://www.cs.cornell.edu/courses/cs3110/2015fa/l/02-fun/rec.html 。如果你有這門課程,你應該問TA修復它。 – camlspotter
@TrungTa您應該將其作爲答案發布,而不是評論。 – dcorking