2010-11-09 7 views
0

Je suis tout à fait nouveau à ruby,<< opérateur Ruby

je suis tombé sur le code suivant dans des rails, mais je ne sais pas comment l'opérateur « < < » et ce qu'il fait dans le code ci-dessous

def <<(rate) 
    r = Rating.new 
    r.rate = rate 
    r.rateable = proxy_owner 
    ... 
    ... 
end 
class << ActiveRecord::Base 
    ... 
    ... 
end 

Quelqu'un peut-il m'expliquer?

Edit: voici le code https://github.com/azabaj/acts_as_rateable/blob/master/lib/acts_as_rateable.rb

+0

La première méthode << est vraiment hors de toute classe? Dans ce cas, il sera appliqué à toutes les classes comme la signification par défaut de l'opérateur <<. – giraff

Répondre

3

def <<(rating): Dans votre exemple, il est utilisé pour ajouter une note à un modèle rateable. (Exemple: acts_as_rateable.rb:41), similaire à l'ajout de quelque chose à une chaîne (str << "abc"). Comme il se trouve dans un module, il ne sera inclus que pour les modèles que vous déclarez admissibles.

class << ClassName:

Toutes les méthodes à l'intérieur de ce bloc seront méthodes statiques/classe (voir this blog entry). (Dans ce cas, tous les modèles auront les méthodes Model.example_static_method.)

+0

+1 pour expliquer la deuxième question, que je ne connaissais pas réellement. Je ne sais pas pourquoi j'ai obtenu la coche, désolé. :-( –

+0

Pas de problème .... – giraff

+0

Ooh, beaucoup mieux .. Félicitations pour votre coche bien méritée –

2

Presque tous les opérateurs de Ruby sont en fait des méthodes d'instance appelées sur l'objet qui les précède.

Il existe de nombreuses utilisations différentes pour << selon le type d'objet sur lequel vous l'appelez. Par exemple, dans un tableau, cela fonctionne pour pousser la valeur donnée sur la fin du tableau.

Il semble que ce soit pour un objet de modèle Rails, donc dans ce cas, je dirais qu'il s'agit d'une méthode auxiliaire appelée lorsque vous ajoutez un objet de modèle à la collection d'objets de modèle. Par exemple, dans ce cas, vous pouvez ajouter une note à un produit.

Si vous avez montré toute la définition de la méthode et montré dans quelle classe elle se trouve, je pourrais fournir une réponse plus spécifique.

+0

voici le code complet pour def << (taux) ... https://github.com/azabaj /acts_as_rateable/blob/master/lib/acts_as_rateable.rb – Madhusudhan

Questions connexes