[REBOL][Prototype]
REBOL [] person: make object! [ name: none age: none ] ; プロトタイプを生成 tea: make person [ name: "Tea" age: 24 ] probe tea ; probe はオブジェクトをdumpして表示する関数。 ; プロトタイプなので更に派生する事も可能。 foo: make tea [ name: "foo" ] probe foo ; 定義済みのobjectを新たに拡張する事も出来る。 person: make person! [ ; コンストラクタに相当する関数を定義してみる。 new: func [new-name new-age] [ ; self はobject自身を指す。makeでクローンを生成して返す。 make self [ name: new-name age: new-age ] ] ] hina: person/new "Hina" 18 probe hina
REBOLの第一印象は、括弧なしLISP, コンマなしIo。
- Prototype based Object Oriented
- Email, Money, Date, URL が組み込み型。Quoteなしに、EmailやURLをスクリプト中に書ける。
- Seriesと呼ばれるデータ構造を持ち、REBOLスクリプト自身もそのデータ構造で表す事が出来る。(自己記述性)
- 評価順序
- write %output.file read %input.file が期待通りに解釈される。
- 数式を扱う場合に注意。>> 10 + 20 * 30 + 100 は 710でなく 1000 になる。
- ()で明示的に評価順序を指定すれば問題なし。
- 変数のスコープ。
- 関数宣言内で局所化する場合は明示的に/localで宣言する必要あり。
- object宣言内のブロックでは別スコープ。
- 引数の数が曖昧。()を使う事も出来るが省略も出来る為。
- メソッドを追加する場合にスコープの制限あり。(総称関数が実現できない...?)
- これってプロトタイプベースの利点が活かし切れていないのでは?
- ソースがない。(非オープンソース?、拡張したかったけどライセンスが...)