すばらしい! 自分なりにも、Squeak Smalltalk 版からの移植っぽいやつを考えてみました(「#アホに」はお借りしました…)。Ruby は、ブロックがオブジェクトじゃないのがつらいですね(^_^;)。あと、Rubinius Ruby でなくとも動かせるように、実行時コンテキストをたぐるギミックは無しにして、代わりにグローバル変数を使っています。
#!/usr/bin/ruby -Ku class Object; alias :、 :proc end class FalseClass def と; yield end def の時だけ(シンボル); end end class TrueClass def と; self end def の時だけ(シンボル); シンボル end end class Integer def から(終わり); self..終わり end def の倍数; $各々 % self == 0 end def がつく数字; $各々.to_s.include?(to_s) end def の読み raise "ギブ" if self >= 1e4 case self when 0; '' when 1..9; %w[いち に さん よん ご ろく なな はち きゅう][self-1] else 残り = self ['', 'じゅう', 'ひゃく', 'せん'].inject(''){ |結果,小位| 桁数字 = 残り % 10; 残り = 残り / 10 桁数字 == 0 ? 結果 : ((桁数字 == 1 and !小位.empty?) ? '' : 桁数字.の読み) + 小位 + 結果 } end end end module Enumerable def なります; self end def なって(&すること); self << すること end def まで数えて(すること群) each{ |各々| $各々 = 各々 メソッド名群 = すること群.collect{ |すること| すること.call } 出力 = メソッド名群.compact.inject(''){ |結果,メソッド名| 結果 = 各々.の読み if 結果.empty? 結果.send(メソッド名) } puts 出力.empty? ? 各々 : 出力 } end end class String def アホに; sub(/\A./){ $& + '〜' } end def 犬っぽく; self + 'バフッ' end def 気持ちよく self + case scan(//).last when 'な'; 'ぁ' when 'ち', 'に'; 'ぃ' when 'く', 'う', 'ッ'; 'ぅ' when 'ご'; 'ぉ' else '' end + '〜〜ッ' end end class Proc def なって(&すること); [self, すること] end def なります; [self] end end #1.から(40).まで数えて 、{3.の倍数.と{3.がつく数字}.の時だけ:アホに}.なります