2012-01-31 12 views
2

私はmain/mail.mlで仕上げ、私のmakefileで定義されてコンパイルする.mlのリストを持っています。"failwith"はもう許可されていませんか?

私はこれらのファイルの一部の機能のボディなど、いくつかのfailwith "to do"を持っています。以前は、実行時の実行にその関数が必要な場合にのみエラーが発生することを覚えています。

今日はすべて私の.mlのコンパイルが正常に動作します:.cmicmxおよび.oがすべて生成されています。しかし、メインのバイナリを起動すると、最初にlet()main.mlになっているようではなく、リスト.mlのすべてのファイルがmakefileにあり、最初にfaiwith "to do"になるとFatal error: exception Failure("to do") make: *** [all] Error 2になります。

私は誰もがその理由であるかもしれないものを私に言うことができる、非常に奇妙なこの動作を見つけますか?私のmakefileまたはmain.mlで間違った何かがあるのでしょうか?

答えて

5

failwithはまだ許可されています!しかし、時にはこれも私に起こります。

通常問題ではなく、機能値が失敗することを、あなたはfailwithが、実際にはモジュールの初期化中に実行されることを意味し、非機能値が失敗することを行っています。だから、どこかで、あなたのコード内であなたが書いたと思われる:failwithは、モジュールの初期化代わりの時に実行されます

let f = failwith "TODO" 

:機能fが実際に呼び出されたときfailwithが実行されます

let f x = failwith "TODO" 

引数。

+5

ボーナス:あなたは引数を '_'名前や' _x'、あなたが任意の潜在的な「未使用の変数 'X'」警告を回避する場合。 – gasche

関連する問題