メソッド名自動生成
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
追記:
- novさんの答え
追記:なかださん(出力は、中田さんのお名前)↓
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すればメソッドをほんとうに自動定義できますよ、という話題。
これって「メソッド動的定義のメモ化」ですね♪