命名私は動的に名前のメソッド(私はこれを行うには、ユーザの入力にそれを任せるが、一例としてではないでしょう)にできるようにしたい:動的メソッドは
puts ""
foo = gets
def (whatever the user inputted for foo)
end
はどうすればこれを行うことができますか?
命名私は動的に名前のメソッド(私はこれを行うには、ユーザの入力にそれを任せるが、一例としてではないでしょう)にできるようにしたい:動的メソッドは
puts ""
foo = gets
def (whatever the user inputted for foo)
end
はどうすればこれを行うことができますか?
send
メソッドを使用して、このクラスにメッセージを送信し、パラメータ:define_method
を使用して、そのクラスに新しいメソッドを定義することを通知できます。
c.sound
の呼び出しがエラー
NoMethodError: undefined method `sound' for #<Car:0x29d9048>
しかし、メソッドの名前を定義し、クラスにそれを送信した後もたらすクラスにCar
class Car
end
c = Car.new
を持つ例えば
、
input = "sound"
Car.send(:define_method, input) do
puts "vroom!"
end
c.sound
への呼び出し今出力
vroom!
をもたらす最も一般的に使用されるアプローチは、以下のとおりです。define_method
、class_eval
とinstance_eval
。定義するmethod_missing
メソッドも多く使用されます。
#An example of class_eval
class Foo
end
foo = gets.chomp
#suppose you input bar here
Foo.class_eval %Q{
def #{foo}
puts "This is #{foo} method you defined!"
end
}
Foo.new.bar
#output: This is the bar method you defined!
instance_eval
は、同様の方法で使用されますが、クラスのインスタンスで定義されます。
#An example of define_method
klass = Class.new
foo = gets.chomp
#suppose you typed bar
klass.send(:define_method,foo) do
puts "This is #{foo} method you defined!"
end
klass.new.bar
#output: This is bar method you defined!
検索「ルビーメタプログラミング」と多くのチュートリアルはそこにあります define_method
も同様です。