Ruby Language méthode send ()


Exemple

send() est utilisé pour transmettre un message à l' object . send() est une méthode d'instance de la classe Object . Le premier argument dans send() est le message que vous envoyez à l'objet, c'est-à-dire le nom d'une méthode. Il peut s'agir d'une string ou d'un symbol mais les symboles sont préférés. Ensuite, les arguments doivent passer en méthode, ce seront les arguments restants dans send() .

class Hello
  def hello(*args)
    puts 'Hello ' + args.join(' ')
  end
end
h = Hello.new
h.send :hello, 'gentle', 'readers'   #=> "Hello gentle readers"
# h.send(:hello, 'gentle', 'readers') #=> Here :hello is method and rest are the arguments to method.

Voici l'exemple plus descriptif

class Account
  attr_accessor :name, :email, :notes, :address

  def assign_values(values)
    values.each_key do |k, v|
      # How send method would look a like
      # self.name = value[k]
      self.send("#{k}=", values[k])
    end
  end
end

user_info = {
  name: 'Matt',
  email: 'test@gms.com',
  address: '132 random st.',
  notes: "annoying customer"
}

account = Account.new
If attributes gets increase then we would messup the code
#--------- Bad way --------------
account.name = user_info[:name]
account.address = user_info[:address]
account.email = user_info[:email]
account.notes = user_info[:notes]

# --------- Meta Programing way --------------
account.assign_values(user_info) # With single line we can assign n number of attributes

puts account.inspect

Remarque: send() n'est plus recommandé. Utilisez __send__() qui a le pouvoir d'appeler des méthodes privées, ou (recommandé) public_send()