引きつづきOCaml。OCamlのObject Orientedな部分の仕様が思ってたより膨大で、Thriftが生成したコードが理解できないのでOreillyの本を読みつつサンプルを書いてみる。
oo.ml
class car (name, color)=
object
val mutable m_name = name
val mutable m_color = color
method get_name = m_name
method get_color = m_color
method to_string = m_color ^ " " ^ m_name
end;;
class flying_car(name, color, flying) =
object
inherit car(name, color)
val mutable m_flying = flying
method land_car = m_flying <- false
method fly_car = m_flying <- true
method to_string =
let state = if m_flying then "flying" else "not flying" in
state ^ " " ^ m_color ^ " " ^ m_name
end;;
let c = new flying_car("Keitora", "black", true) in
let () = c#land_car in
let msg = "I bought a new " ^ c#to_string in
print_endline msg
出力
$ ocamlc oo.ml $ ./a.out I bought a new not flying black Keitora
しかしOOな仕様が入ると途端に予約語が増える。ちなみに、最初は関数land_carをlandって名前にしてて謎のコンパイルエラーが発生してた。結局原因はlandという名前の組込み演算子が存在するから。syntax errorってだけじゃなかなか気付かないッスよコンパイラさん。
0 件のコメント:
コメントを投稿