Je suis nouveau à Ruby et travaille à travers quelques tutoriels/screencasts. J'ai atteint la section où ils discutent le rappel before_filter
, et il utilise une syntaxe un peu bizarre pour moi. Je ne sais pas si c'est une caractéristique de ruby, si c'est de la magie des rails, et j'espérais que quelqu'un ici pourrait me redresser ou me pointer dans la bonne direction w/r/t le manuelAppel d'une méthode à l'intérieur d'une classe Ruby? (ou est-ce magique de rails)
Ceci est un code fragment du screencast je regarde
class MachinesController < ApplicationController
#...
before_filter :login_required, :only => [:report]
#...
def index
#etc...
end
def login_required
#etc...
end
end
Dans le contexte des rails, je comprends que before_filter
est un rappel qui méthode feu login_required
lorsque l'action report
est appelée. Cependant, ce n'est pas clair pour moi ce que c'est dans le contexte de ruby. Dans d'autres langages, les classes contiennent généralement des méthodes, des propriétés, des variables de classe et des constantes définies dans les accolades. Cependant, cela ressemble à un appel de fonction à l'intérieur de la classe, et certaines expériences ont montré que vous pouvez mettre du code dans vos définitions de classe et le faire appeler lorsque le programme s'exécute. Est-ce correct? Si oui, existe-t-il des règles contextuelles spéciales pour le code qui est inséré dans une classe comme ça? (c'est-à-dire que la fonction before_filter dans les rails sait de quelle classe elle a été appelée) Sinon, quelle magie font les rails ici?
OMI, vous devriez choisir la réponse de Sarah Mei comme votre «réponse choisie», elle fournit l'explication la meilleure et la plus complète. – horseyguy
La réponse de Sarah est géniale, mais c'est une question que je n'ai pas posée. J'ai été confus par l'appel de méthodes à l'intérieur d'une classe, quelque chose que vous ne pouvez pas faire en PHP ou en Java. Je voulais savoir s'il y avait de la magie dans les rails, ou si Ruby le supportait, et si Ruby le supportait, quel était le code d'appel w/r/t différent dans une classe. Jonathan a répondu cela en expliquant comment l'identité a changé. –
Peut-être que la question devrait être éditée un peu, je pensais quelque chose comme: "Ruby: Appeler une fonction dans une définition de classe" –