2010-11-29 121 views
0

我使用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 

這個作品在紅寶石1.8.6,但是當我嘗試做這在1.8.5,並嘗試發送多個ARG我得到的線沿線的一個錯誤:

錯誤的參數數目(2 X)

其中X爲參數的個數該特定的方法需要。我寧願不重寫所有的通知方法 - Ruby 1.8.5可以處理這個嗎?

+2

出於好奇,爲什麼*不*使用Ruby 1.8.6? – Matchu 2010-11-29 03:51:38

回答

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' 
)