Ruby、君はオブジェクト指向なんかじゃない、謎の生命体試行錯誤だ!
やはり僕が話しかけない限り、謎の生命体「固定番号:1」はなにもしない。昨日一日彼を観察してわかったことだ。
僕が寝ている間に動き出して僕を拘束し、遠い彼らの惑星に連れ出す。
そんなことは起こらなかった。
とはいっても僕には、そのような恐怖心すら正直起きなかったのだ。むしろ昨日は、ある種の安らぎのようなものを感じて眠りにつくことができた。
それはもしかしたら、昨日の彼との短い対話から、こちらが彼らのやり方に沿って正しく問い掛けをすれば、揺るぎのない回答を即座に返してくることから得られる、ある種の信頼に基づく結果なのかもしれない。
いずれにしても僕は現在、彼「固定番号:1」に昨日以上に強く興味を引かれている。
では早々彼の分析を始めようじゃないか。
昨日彼らのやり方ーmethodーには93種類あるということがわかった。
$ 1.methods
$ => ["%", "inspect", "<<", "singleton_method_added", "&", "clone", ">>", "method", "round", "public_methods", "instance_variable_defined?", "divmod", "equal?", "freeze", "integer?", "chr", "*", "+", "to_i", "methods", "respond_to?", "-", "upto", "between?", "prec", "truncate", "/", "dup", "instance_variables", "__id__", "modulo", "object_id", "succ", "|", "eql?", "zero?", "~", "id", "to_f", "singleton_methods", "send", "prec_i", "taint", "step", "to_int", "frozen?", "instance_variable_get", "__send__", "^", "instance_of?", "remainder", "to_a", "+@", "nonzero?", "-@", "type", "**", "floor", "<", "protected_methods", "<=>", "instance_eval", "==", "prec_f", "quo", ">", "display", "===", "downto", "id2name", "size", "instance_variable_set", "kind_of?", "abs", "extend", ">=", "next", "to_s", "<=", "coerce", "hash", "ceil", "class", "tainted?", "=~", "private_methods", "div", "nil?", "untaint", "times", "to_sym", "[]", "is_a?"]
今日はどれを試してみようか。彼のことがもう少しわかるようなもの…
いいのがあった。
$ 1.size
さあ答えてくれたまえ。
$ => 4
あれ?1じゃないのか。sizeといっても身長とか洋服のサイズとかではなさそうだな。でもまあsizeというんだから、それは彼自身のサイズであって、彼の存在が4だけ空間を占有しているってことなんだろう。僕が予想するに「固定番号:2」の空間占有量は8だな。
おっ、nextっていうのがあるぞ。
$ 1.next
$ => 2
って、君に聞くまでもないじゃないか。1の次は2に決まってる。まあ確かに暗闇で君に問いかけるとしたら、それも意味があるかもしれないな。君の星じゃ1の次は3なんてことがあるかもしれないし。
いいことに気がついた。
$ 1.next.size
こうすれば「固定番号:2」のサイズもわかるんじゃないか。
$ => 4
ほら!
君の体をちょん(.)と突いて問い掛けるやり方の応用だよ。ちょんちょんってね。僕はchain smokerならぬchain talkerだ。でも僕の予想は外れた。隣のヤツも同じサイズだった。
なるほど、僕はここで極めて重大なことに気がついたよ。要するに君は、君の隣のヤツの情報も持ってるってことだ!試してみよう。
$ 1.next.__id__
ほらね?
$ => 5
$ 1.next.class
$ => Fixnum
君の隣のヤツは「固定番号:2」であり、その社会保障番号は5だ。職務階級は同じFixnum、どうやら社会保障番号4は欠番になっているようだ。
そうか、同じ職務階級の隣の席のヤツが「固定番号:2」なんだな。だんだんイメージが湧いてきたぞ。
ちょちょっと待て、もしかしたら。
$ 1.next.next
あ!
$ => 3
じゃあこれは?
$ 1.next.next.next.next.next.next.next.next.next
$ => 10
じゃあ。
$ 1.next.next.next.next.next.next.next.next.next.next.next.next.next.next.next.next.next.next.next.next.next.next.next.next.next.next.next.next.next.next.next.next.next.next.next.next.next.next.next.next.next.next.next.next.next.next.next.next.next.next.next.next.next.next.next.next.next.next.next.next.next.next.next.next.next.next.next.next.next.next.next.next.next.next.next.next.next.next.next.next.next.next.next.next.next.next.next.next.next.next.next.next.next.next.next.next.next.next.next
来たぞ!
$ => 100
固定番号:100の職務階級は…
$ 1.next.next.next.next.next.next.next.next.next.next.next.next.next.next.next.next.next.next.next.next.next.next.next.next.next.next.next.next.next.next.next.next.next.next.next.next.next.next.next.next.next.next.next.next.next.next.next.next.next.next.next.next.next.next.next.next.next.next.next.next.next.next.next.next.next.next.next.next.next.next.next.next.next.next.next.next.next.next.next.next.next.next.next.next.next.next.next.next.next.next.next.next.next.next.next.next.next.next.next.class
$ => Fixnum
すごい!隣のヤツのだけじゃあないんだ!君が持ってるのは!脳みそがどこにあるのかもわからない君の、その小さな体のどこにそんな大量の情報が埋め込まれてるんだ!
ここまでの調査からするとこういうことだな。つまり、職務階級Fixnumには君らのような固定番号の連中がうじょうじょいる。そしておそらく上官だか上司の命令に従って、いつもは一列に順序正しく並んで座っている。一人分の座席スペースは4だ。君の右隣は「固定番号:2」であり、その隣は3だ。君ら一人一人には飛び番だが社会保障番号が与えられ、独立した活動が保障されている。
君の左隣は間違いなく0なんだろう。しかしどういうわけかnextはあるのに、previousとかbeforeとか、前のヤツを調べるmethodがない。ここにも階級的な序列があって、上位のものの情報が覗けないようになっているのかもしれない。
今succというmethodを見つけたぞ(suckでなくて何よりだ)。
$ 1.succ
やっぱり
$ => 2
succはsuccessorつまり、「継承者」だ。1は2を自分の継承者に選んでおり、その行動に責任を持つ。1に何かあったときには、2がその職責を継承する。1はさらに2の継承者である3の行動の責任をも持つ。逆に1は0の継承者であり、0の行動に責任を持つ必要はないが、0に何かあったときにはその職責を継承する。そういうシステムなんだろう。社会保障番号に欠番があるのは、そこにいたものの身に何かがあったんだろう。それで合点が行く。
さてこれぐらいにして、これまでの調査でわかったことを記録しておくとしよう。
- 職務階級Fixnumには固定番号:1と同種の生命体がおそらく無数にいる
- 各固定番号間にも階級が存在し上位のものは下位のものの情報をすべて持っている
- chain talker方式で下位のものの情報を聞き出すことができる
- 一方で下位のものは上位のものの情報を見ることが禁止されている
- 各固定番号は固有の社会保障番号を持っておりこれは上位のものがいなくなっても変わることはない
blog comments powered by Disqus