Tentando criar objetos e chamar métodos dinamicamente,
Object.const_get(class_name).new.send(method_name,parameters_array)
que está funcionando bem quando
Object.const_get(RandomClass).new.send(i_take_arguments,[10.0])
mas jogando número errado de argumentos 1 para 2 para
Object.const_get(RandomClass).new.send(i_take_multiple_arguments,[25.0,26.0])
A classe aleatória definida é
class RandomClass
def i_am_method_one
puts "I am method 1"
end
def i_take_arguments(a)
puts "the argument passed is #{a}"
end
def i_take_multiple_arguments(b,c)
puts "the arguments passed are #{b} and #{c}"
end
end
Alguém pode me ajudar sobre como enviar parâmetros múltiplos para um método ruby dinamicamente
*
, neste contexto, é o operador "splat".Você pode ligar alternadamente
send
com o sinônimo__send__
:By the way * você pode passar hashes como params vírgula separados da seguinte forma:
ou nova sintaxe de hash:
Segundo Black,
__send__
é mais seguro o espaço para nome.Preto também sugere chamadas de embalar,
__send__
noif respond_to?(method_name)
.Ref: Black, David A. O Rubiista bem fundamentado. Manning, 2009. P.171.
* Eu vim aqui procurando por sintaxe de hash
__send__
, por isso pode ser útil para outros googlers. ;)fonte