2016-08-17 72 views
0

從閱讀: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? 

我不明白他們怎麼是等價的,如果第一行不一個有效的功能。

+6

第一行'='的RHS中的變量'name1'沒有定義。我認爲這是〜name1的一個錯字:name2。第一行應該讓f〜name1:name1〜name2:name2 = name1 + name2 –

+1

它來自http://www.cs.cornell.edu/courses/cs3110/2015fa/l/02-fun/rec.html 。如果你有這門課程,你應該問TA修復它。 – camlspotter

+3

@TrungTa您應該將其作爲答案發布,而不是評論。 – dcorking

回答

0

syntax of function arguments允許不同的表達式。

鑑於計算結果爲函數f表達式expr,下面的語法被允許的規則如下:

  • expr arg(給出的表達式arg):評價arg爲一個值v;結果的f值與參數評價v

  • expr ~lbl(給定一個名爲lbl):僅在f具有類型lbl:a -> b對於某些類型的ab,結果是f ~lbl與參數計算的值a; OR,當f的類型爲?lbl:a -> b(然後,lbl必須具有用於類型檢查的類型a)。

  • expr ~lbl:arg(給出的表達式arg):這是在同樣的事情let lbl = arg in exp ~lbl(不同之處在於exprarg評價順序是不確定的)。

  • expr ?lbl(給定一個名爲lbl):僅在f具有類型?lbl:a -> b對於某些類型的ab,結果是f ~lbl與參數a計算的值; lbl必須有類型a option進行類型檢查。這主要出現在將可選參數從一個函數轉發到另一個函數時。

  • expr ?lbl:arg(給出的表達式arg):這是在同樣的事情let lbl = arg in exp ?lbl(不同之處在於exprarg評價順序是不確定的)。