メソッド名自動生成
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すればメソッドをほんとうに自動定義できますよ、という話題。
これって「メソッド動的定義のメモ化」ですね♪