オブジェクト・パターンマッチ
>ふと、 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 ならできるのかなあ。 >
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 ならできるのかなあ。 >