X := Object clone do ( / := method( if (self ?called, "スケッチ", "ひだまり") print self called := true self ) < := method(o, "365" print o println ) ) X / _ / X < "来週も見てくださいね!"
このコードにおいて、 _ は評価されない ( / の引数なのだけど、/ 内では _ を評価していない) ので定義してなくてもいいところがポイントです。?called は、初回呼び出し時の called スロットがないために起こるエラーを回避します (正確な?の効果は「対象オブジェクトが指定メッセージに応答しないならば、メッセージセンドを行わない」かな? つまり ? でわっしょい!)。
文字列リテラルを使わずに call argAt(0) とかもできるはずなんですが、どうもマルチバイトだとダメみたいで諦めてます。
#!ruby -Ku class X attr_reader :a, :b def self./(a) new(a) end def self.to_s "×365" end def initialize(a) @a = a end def /(b) @b = b print self self end def <(o) puts " #{o}" end def to_s @a.a + "スケッチ" + b.to_s end class ::Object def _ X.new("ひだまり") end end end X / _ / X < :来週も見てくださいね!
正式名称になるように一文字足しました