`Send` и `Public Send` в Ruby

Об этих методах я узнал, когда изучал Ruby, но так и не понял, зачем они существуют и где их можно использовать. Тем не менее, они существуют, и в эти выходные я наконец-то нашел им применение.

Во-первых, что такое Send и Public Send? (Согласно документации send и public send)

Send: Вызывает метод, обозначенный символом, передавая ему все указанные аргументы. Вы можете использовать send, если имя send не совпадает с существующим методом в obj. Если метод идентифицирован строкой, строка преобразуется в символ.

Public Send : Вызывает метод, обозначенный символом, передавая ему все указанные аргументы. В отличие от send, public_send вызывает только публичные методы. Когда метод идентифицируется строкой, строка преобразуется в символ.

Я создавал помощника в rails для форм, чтобы автоматически генерировать теги ввода для определенных полей модели, поэтому я определял массив следующим образом

cols = ["first_name", :user, :first_name, "text"]
Войти в полноэкранный режим Выйти из полноэкранного режима

Где у нас есть имя тега, модель, поле и тип тега в таком порядке. Этот массив затем отправляется в представление, где теги строятся на основе содержимого массива.

Это было сделано для того, чтобы получить доступ к модели таким образом, чтобы мне не пришлось жестко кодировать ее для конкретных моделей (как в случае с ассоциированными моделями и т.п.). Я использовал публичные посылки следующим образом

cols[1]&.public_send(col[2])
Войти в полноэкранный режим Выйти из полноэкранного режима

Это вызовет только публичный метод, названный в cols[2] модели, названной в cols[1].

Я не могу придумать другого варианта использования public_send и send, так что если вы ветеран руби, пожалуйста, сообщите мне ниже, использовали ли вы это раньше.

Оцените статью
devanswers.ru
Добавить комментарий