以下是我在F#編輯器中編寫的函數,它按照我的預期工作(答案:18)。關於F#函數
let quadruple x = x*2
let cal(u:int) = quadruple u + 10;
let result = cal 4
但如果我更改代碼的順序,如
let cal(u:int) = quadruple u + 10;
let quadruple x = x*2
let result = cal 4
我越來越「值或構造‘quadrule’沒有定義」。從錯誤中,我認爲,失敗是由於聲明之前的函數調用。對我來說,它就像一個口譯員風格。
問題:爲什麼這樣的限制?這是否有意保持一些兼容性問題?還是因爲我沒有定義任何模塊/類?
在F#中,編譯和定義順序**很重要**。我不知道這是什麼原因(可能類型推斷沒有它,或者效果不好),但是函數/模塊必須被定義爲'在'任何其他功能和/或使用它們的模塊之上'。完整的文件也必須移動到其他可能引用它們的文件之上。 –
@PatrykĆwiek,感謝您的評論。 – Nair
@Nair:讓你的依賴以代碼和項目結構爲模型是件好事。在C#中,管理相互依賴關係要困難得多,特別是對於大型項目。 – Daniel