Как мне повторно передать несколько аргументов метода в Ruby 1.8.5?
Я использую ruby 1.8.5, и я хотел бы использовать вспомогательный метод, чтобы помочь отфильтровать предпочтения пользователя следующим образом:
def send_email(user, notification_method_name, *args)
# determine if the user wants this email
return if !user.send("wants_#{notification_method_name}?")
# different email methods have different argument lengths
Notification.send("deliver_#{notification_method_name}", user, *args)
end
Это работает в ruby 1.8.6, однако, когда я пытаюсь сделать это в 1.8.5 и пытаюсь отправить более одного аргумента, я получаю сообщение об ошибке:
неверное количество аргументов (2 для X)
где X - количество аргументов, которое требуется конкретному методу. Я бы предпочел не переписывать все мои методы уведомлений - может ли Ruby 1.8.5 справиться с этим?
1 ответ
Хорошим решением является переключение на именованные аргументы с помощью хэшей:
def send_email(args)
user = args[:user]
notification_method_name = args[:notify_name]
# determine if the user wants this email
return if !user.send("wants_#{notification_method_name}?")
# different email methods have different argument lengths
Notification.send("deliver_#{notification_method_name}", args)
end
send_email(
:user => 'da user',
:notify_name => 'some_notification_method',
:another_arg => 'foo'
)