我正在使用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中执行此操作并尝试发送多个arg时,我得到了一个错误:
参数数量错误(X为2)
其中X是特定方法所需的参数数量。我宁愿不重写所有的Notification方法 - Ruby 1.8.5可以处理这个吗?
答案 0 :(得分:0)
一个很好的解决方案是使用哈希切换到命名参数:
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'
)