![][1]
[Один из методов][2] библиотеки Sidekiq. [Объяснение смайла][3]
_send_ в Ruby вызывает методы объектов по имени. Вот очевидный способ применения:
# До: явно используем присваивание. Неудобно, если полей много или они определяются в рантайме.
user.name = "Иван"
user.age = 29
# После: передаём имя атрибута параметром. Решает проблемы первого способа.
def set(field, value)
send("#{field}=", value)
end
user.set(:name, "Иван")
user.set(:age, 29)
А ещё вы наверняка видели такие строки:
after_create :send_email
Да-да, коллбэки в рельсах внутри реализованы [тоже с помощью send][4].
[Что ещё умеет send?][5]
[1]:
https://habrastorage.org/files/c89/9b2/547/c899b254775440adbb76027708707360.png
[2]:
https://github.com/mperham/sidekiq/blob/b63a8571524e1e505c93c97c2bdb1c352f845064/lib/sidekiq.rb#L51
[3]:
http://stackoverflow.com/questions/23975346/why-is-%E2%95%AF%C2%B0%E2%96%A1%C2%B0-%E2%95%AF-%E2%94%BB%E2%94%81%E2%94%BB-with-such-an-encoding-used-for-a-method-name
[4]:
https://github.com/rails/rails/blob/38fe5ae24476ef8808d5eb6366afe84ff43a3279/activesupport/lib/active_support/callbacks.rb#L432
[5]:
https://habrahabr.ru/post/318546/?utm_source=habrahabr&utm_medium=rss&utm_campaign=feed_posts#habracut