我在OCaml的版本4.04 UTOP定義一個函數f。忽略OCaml中的函數優雅
utop # let f = function x -> x + 1;;
val f : int -> int = <fun>
當我試圖忽略f,我遇到了一個警告。
utop # let a = ignore (f : int -> int); f 2;;
Characters 15-19:
Warning 5: this function application is partial,
maybe some arguments are missing
val a : int = 3
警告5被觸發,因爲以下ignore
表達具有如下功能接口int -> int
。
ignore (f 0)
和if false then (ignore f 0)
工作,但他們不是優雅。我不想提供缺少的參數給f。有沒有替代ignore
?
的ignore
的動機是不是在這個虛擬例子很清楚,但我確實需要使用它,以避免在我真正的項目的其他警告。
謝謝你的時間。
我聞到一個XY問題(http://xyproblem.info/)。你能解釋一下真實的用例嗎? – Drup
如果你沒有調用這個函數,你爲什麼還要把它放在第一位呢? – Bergi
真正的用例是通過使用ocaml_plugin在運行時編譯一些OCaml代碼。這段代碼可能會或可能不會調用'f'。鑑於我不想將'f'作爲我的插件的庫,最好的方法是將代碼附加到'f'的定義。如果它不調用'f',編譯器會報錯。 –