2010-11-29 8 views
0

J'utilise Ruby 1.8.5 et je voudrais utiliser une méthode d'aide pour aider à filtrer les préférences d'un utilisateur comme ceci:Comment puis-je passer de nouveau plusieurs arguments de méthode dans 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 

Cela fonctionne en Ruby 1.8.6, mais lorsque je tente de faire cela en 1.8.5 et essayer d'envoyer plus d'un arg je reçois une erreur le long des lignes de:

nombre incorrect d'arguments (2) pour X

où X est le nombre d'arguments cette méthode particulière nécessite. Je préfère ne pas réécrire toutes mes méthodes de notification - Ruby 1.8.5 peut-il gérer cela?

+2

Par curiosité, pourquoi * pas * utiliser Ruby 1.8.6? – Matchu

+0

Pourquoi pas 1.8.7 qui est à jour pour Ruby 1.8. –

+0

Existe-t-il un tag pour les anciennes versions de ruby? –

Répondre

0

Une bonne solution est de passer à l'aide d'arguments nommés-hash:

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