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に何かあったときには
その職責を継承する
そういうシステムなんだろう
社会保障番号に欠番があるのは
そこにいたものの身に何かがあったんだろう
それで合点が行く


さてこれぐらいにして
これまでの調査でわかったことを記録しておくとしよう

  1. 職務階級Fixnumには固定番号:1と同種の生命体がおそらく無数にいる
  2. 各固定番号間にも階級が存在し上位のものは下位のものの情報をすべて持っている
  3. chain talker方式で下位のものの情報を聞き出すことができる
  4. 一方で下位のものは上位のものの情報を見ることが禁止されている
  5. 各固定番号は固有の社会保障番号を持っておりこれは上位のものがいなくなっても変わることはない