2014年5月24日土曜日

Rubyのmethod_missingで動的メソッドヘ(^o^)ノ

method_missingで動的メソッドを作ってみよー

method_missingって...そうあれ!よく怒られるやつw

そいつをオーバーライドして、動的メソッドを作るよ

こんな感じ
class Enemy
def initialize
@enemies = {}
end
def method_missing(method_name, *args)
enemy = method_name.to_s
if enemy =~ /=\z/
@enemies[enemy.chop] = args[0]
else
@enemise[enemy]
end
end
end
Enemy.new.instance_eval do
name = "アボ"
max_power = 1080000000
puts "name: #{name}" # => name: アボ
puts "max power: #{max_power}" # => max power: 1080000000
end
view raw enemy.rb hosted with ❤ by GitHub
例えば、17行目でmethod_missingの第1引数には「:name=」こんなハッシュが、
 第2引数には「アボ」って文字列が渡される。

参照する場合、19行目では第1引数には「:name」=のないハッシュが渡される。

その場合は、インスタンス変数のハッシュから値を取得する。

Rubyは楽しい!

ちなみにコードに出てくる「アボ」はこの子です




















Dragon Ball Wiki

戦闘力53万だけど、MAXは10億8千!


( ̄(エ) ̄)彡☆

参考
BasicObject#method_missing

0 件のコメント:

コメントを投稿