オブジェクトはレコード型か?
http://www15.ocn.ne.jp/~rodinia/Blog/MyJournal.html
僕が思ったのは,
オブジェクトと言うのはレコード型の値とは意味的に異なる存在であるが,これまでの議論ではオブジェクトの型をレコード型として取り扱うことが多かった
のは,なんか不満だ.ということなのです.*1
まあ,これはこれとして.
{n : <x : 'a, y : 'b>; m = this.n.x}
というオブジェクトのnに
class Foo def foo=(x) @foo=x end end Foo.new().foo = 123
などとして,「メンバ名+"="」というメソッドの呼び出しとして実装されています.
そうすると,
<n : <x : 'a, y : 'b>; m = 'a>
という型はありえなくって,考えられるのは
<n : <x : 'a, y:'b> -> unit; m = unit -> 'a>
という型になる.これなら,
<n : <y: 'b> -> unit; m : unit -> 'a>
のサブタイプとはならないので,nに
自己参照について何も考えてなかったのは,うっかりしてました.でも,レコード型としてオブジェクトの型を考えたとしても,メンバ関数を暗黙のselfを受け取る関数として表現すれば,なんか変な感じはしますが自己参照も表現できていると思います.
trubyは・・・どうなるのでしょう・・・(弱気)
*1:っていうか,本当にそうなのか,すごく不安になってきた.違うかも.