Commits

camlspotter committed 740e26e

update

Comments (0)

Files changed (1)

 スタックトレースが表示される。assert false で死んだ場所は判ったが、どうやってそこにプログラム実行
 が到達したかわからない場合に便利、というか常に b を入れとけ。わかったか。
 
+Physical comparison (==) (!=) で泣く位なら始めから締めだす
+==============================================================
 
+自分が (=), (<>) と (==), (!=) の違いが判らないとか、同僚が判らない場合は
+もうさっさと (==) と (!=) は潰したほうがいい。Jane Street Core のように::
 
+    (* base.ml *)
+    let phys_equal = (==)
+    let (==) _ _ = `Consider_using_phys_equal
+    let (!=) _ _ = `Consider_using_phys_equal
+
+open Base すると (==) と (!=) の型は 'a -> 'b -> [> `Consider_using_phys_equal] になる。
+そこで::
+
+    if "hello" == "hello" then "equal" else "different";;
+
+などと書くと型エラーに Consider_using_phys_equal と出てくるので、あれ?なんだこれは?とわかる。
+本当に physical comparison を使いたい時は phys_equal "hello" "hello" と書く。
+これを structural comparison  (=) と間違って使った場合はもちろん救えない。
+
+open Base を全 \*.ml ファイルで強制しなければならないが、
+これは grep などで調べれば機械的にチェックできる。