メソッド名自動生成

Danさんからお題が出ていたのでRubyで書いてみました。(Danさんのこのエントリ、なぜかトラックバックもコメントもできない…)←直っていました。

class AsciiChar
  def method_missing(method, *args)
    p "#{method}" if $DEBUG
    method.to_s.sub(/^_/, "").hex.chr
  end
end

a = AsciiChar.new
print a._72
print a._75
print a._62
print a._79
print a._63
print a._6F

実行結果です。

rubyco

Unicodeにするのはどうするのだろう…(^_^;
追記:novさんからいただいた情報を元にUnicode版を作ってみました。
こ、これでいいんでしょうか(packは苦手)。

class UnicodeChar
  def method_missing(method, *args)
    p "#{method}" if $DEBUG
    [Integer(method.to_s.sub(/\Au_?/, "0x"))].pack("U")
  end
end


追記:

追記:なかださん(出力は、中田さんのお名前)↓

def (UTF8Char = Object.new).method_missing(method, *args)
    method.to_s.scan(/[[:xdigit:]]+/).map{|s|s.hex}.pack("U*")
end

u = UTF8Char
puts u._4e2d_7530_4f38_60a6

追記:なかださんのプログラムを見て「なら、これで良いのでは?」と思いました。…でもすでに弾さんのお題から離れていることに気づきました♪

class Fixnum
  def to_utf8
    to_s(16).scan(/[[:xdigit:]]+/).map{|s|s.hex}.pack("U*")
  end
end
print 0x7D50.to_utf8
print 0x57CE.to_utf8
print 0x6D69.to_utf8

追記:すでにもとの主旨からはるかに離れていますが…。

class Fixnum
  def to_utf8
    [ self ].pack("U*")
  end
end
print 0x7D50.to_utf8
print 0x57CE.to_utf8
print 0x6D69.to_utf8

追記:define_methodをinstance_evalすればメソッドをほんとうに自動定義できますよ、という話題。

これって「メソッド動的定義のメモ化」ですね♪