Ruby · Intermediário · Inglês · Técnico
send
Método de Object que chama outro método pelo nome, dado como símbolo ou string, ignorando a visibilidade. O public_send faz o mesmo, mas respeita métodos privados.
Onde usar
Aparece em metaprogramação, ao despachar comandos dinamicamente, como obj.send(:nome=, valor). Em testes, chamar métodos privados com send costuma ser mau sinal.
Em código
p 5.send(:+, 3) # => 8
class Cofre
private
def segredo = 42
end
c = Cofre.new
p c.send(:segredo) # => 42
c.public_send(:segredo) # NoMethodErrorExemplos
Use public_send so private methods stay private.
Use public_send para que métodos privados continuem privados.
Send lets you call a method by its name.
O send deixa você chamar um método pelo nome.
Cuidado
Evite send com texto vindo do usuário: ele executa até métodos privados e perigosos. Valide com uma lista permitida ou use public_send.
Sinônimos
__send__, public_send