Существует 3 способа динамического вызова методов с помощью тестов, показанных здесь . Я подведу итог статье ниже:
Одним из способов динамического вызова метода в ruby является отправка сообщения объекту:
p s.send(:length) #=> 6
p s.send(:include?,"hi") #=> true
Второй способ - создать экземпляр объекта метода и затем вызвать его:
method_object = s.method(:length)
p method_object.call #=> 6
method_object = s.method(:include?)
p method_object.call('hi') #=> true
И третий способ - использовать метод eval:
eval "s.length" #=> 6
eval "s.include? 'hi'" #=>true
Согласно результатам тестов, SLOWEST является пробным, поэтому вместо него я бы использовал send
.
#######################################
##### The results
#######################################
#Rehearsal ----------------------------------------
#call 0.050000 0.020000 0.070000 ( 0.077915)
#send 0.080000 0.000000 0.080000 ( 0.086071)
#eval 0.360000 0.040000 0.400000 ( 0.405647)
#------------------------------- total: 0.550000sec
# user system total real
#call 0.050000 0.020000 0.070000 ( 0.072041)
#send 0.070000 0.000000 0.070000 ( 0.077674)
#eval 0.370000 0.020000 0.390000 ( 0.399442)