オブジェクト・パターンマッチ

This entry was posted by on Wednesday, 29 June, 2005
>ふと、 OCaml でオブジェクトのパターンマッチができないか、ということが気になる。 > >ちょっと試してみようとして、 > >class c1 = object method m1 = 1 end
class c2 = object method m2 = 1. end
let f = function
| #c1 as o -> o#m1
| #c2 as o -> int_of_float o#m2
> >のようなコードを書いてみたが、パターンマッチにおける # は多相バリアントの省略形で、クラスパスじゃなかった。 > >型の指定はどうか?ということで、 > >let f = function
| (o : #c1) -> o#m1
| (o : #c2) -> int_of_float o#m2
> >としてみたが、これは引数が直積型になるだけで、無条件に c1 にマッチしちゃうからまったく意味がない。 > >つうかそもそも「メソッドとして m1 または m2 を持つオブジェクト型」という型の表現がないので無理なんですが。 GCaml ならできるのかなあ。 >

Comments are closed.