我希望能夠動態名稱方法(我不會離開它的用戶輸入要做到這一點,但作爲一個例子):動態方法命名
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
向該類發送消息告訴它您將要爲該類定義新方法。
例如,具有一個類Car
class Car
end
c = Car.new
到c.sound
甲呼叫帶來的誤差
NoMethodError: undefined method `sound' for #<Car:0x29d9048>
但是,在定義該方法的名稱,並把它發送到後級:
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
以類似的方式使用,但在一個類的實例中定義。 define_method
也相似:
#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!
搜索「紅寶石元編程」和有很多教程在那裏。