プログラミング言語 Scala 6冊目
レス数が950を超えています。1000を超えると書き込みができなくなります。
0978977
2011/09/03(土) 09:44:35.12class ['a] mylist (l : 'a list) =
object
method foldLeft init f = List.fold_left f init l
end
だと思うが、これはクラス定義の制限(より正確にはOCamlのlet多相性の制限)によって通らない
なので>>962のように定義してやる必要がある(そのかわりfoldLeftは多相的にならない)
一方で、こういったOCamlの型推論の制限に引っかからないように
オブジェクトを直接定義してやると多相的なfoldLeftを持つオブジェクトが得られる
let foldl collection init f = collection#foldLeft init f
let obj = object
val lst = [1; 2; 3]
method foldLeft init f = List.fold_left f init lst
end
let _ = foldl obj 0 (+)
let _ = foldl obj "0" (fun x y -> x ^ string_of_int y)
ま、何にしろOCamlの型推論は慣れるまで難しいな
レス数が950を超えています。1000を超えると書き込みができなくなります。