6
我剛剛開始使用F#,當玩弄操作符重載時,我遇到了一些我不太明白的東西。現在,我明白你不能使用例如+*
作爲重載前綴運算符;它只能是一箇中綴操作符。此處,我感到困惑,但是:F#操作符/函數混淆
let (+*) a = a + a * a;;
如果我運行此,FSI告訴我,功能(+*)
是int->int
。太好了,我可以挖掘它 - 它不是一個重載操作符,只是一個名爲(+*)
的正常函數。所以,如果我這樣做:
printf "%d" ((+*) 6)
我會得到42,因爲我期望。但是,如果我嘗試:
printf "%d" (+*) 6
or
printf "%d" (+*)6
它不會編譯。我現在無法將確切的錯誤提出來,因爲此時我無法訪問F#編譯器,但爲什麼會這樣呢?這裏的綁定發生了什麼?
啊,這是有道理的。但是,參數的間隔語法看起來好像會使綁定混淆。以什麼順序將空間綁定參數?我習慣於帶有強制括號參數的類C語言,所以這種綁定對我來說顯而易見。 – Perrako 2010-08-03 00:55:23
Perrako,這是一個很好的後續問題。將它作爲一個單獨的問題發佈,以便我們對未來有一個參考(例如,「當我習慣C類參數時,如何習慣F#參數傳遞語法?」)。 (我很抱歉,我無法回答自己;我在F#之前學習了Lisp,所以我習慣了這種空間語法。) – 2010-08-03 04:07:26
沒關係,我發現這個問題可能會回答你的問題:http:// stackoverflow .com/questions/2725202/f-function-calling-syntax-confusion – 2010-08-03 04:18:47