Code Aquarium

minazoko's blog -*- 水底のブログ -*-

(Racket) Class の External Name Control

RacketのClassシステムの説明にある Internal / External Names がピンと来なかったので、サンプルを書いてみました。
公式ドキュメントでは 比較対象にJavaのprotectedを例にあげていますが、むしろ C++ の friend に近いような気がします。

Racketのdefine-member-nameの例(gist)

generate-member-key はgensymで内部シンボルを作っています。define-member-name で束縛すると、束縛されたシンボルと同名のメソッドが外部から参照できなくなる仕組みです。