ExpertiDict

Ruby · Intermediário · Inglês · Técnico

send

/sɛnd/método

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)  # NoMethodError

Exemplos

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

Veja também

Todos os termos de Ruby