J'essaie d'apprendre Ruby ainsi que de rubis sur rails en ce moment. Je suis suivant avec les rails d'apprentissage, la 1ère édition, mais je suis difficile à comprendre une partie du code.
Je travaille généralement dans C, C ++ ou Java, donc Ruby est un très gros changement pour moi . P>
Je suis actuellement soulevé par le bloc de code suivant pour un migrateur de base de données: p> Où est la variable T? Qu'est-ce que cela représente réellement? Est-ce une sorte de ressemblance comme le "i" dans un (i = 0; i <5; i ++) énoncé? P> aussi, où est la suivante: les entrées étant définies? (Les entrées sont le nom de mon contrôleur, mais comment cette fonction sait-elle à ce sujet?) p> p>
10 Réponses :
Create_Table est la méthode qui accepte l'expression Lambda (une sorte de délégué), T est l'argument du délégué. Donc, lorsque vous exécutez Create_Table, il exécute quelque chose comme pseudo code p> analogique direct dans Java est une classe anonime. P> addReturnBackListener(new Listener<EventObject>() {
public void handle(EventObject e) {
refreshAndShowAndList();
}
});
Oui, besoin de quelque chose pour réparer mes erreurs :)
Je vais prendre le t code> chose. La méthode Create_Table code> est comme une fonction C qui prend un pointeur de fonction qui prend un argument, l'objet Définition de la table (pardonnez à mes compétences en C inexistantes): a = 10
create_table :entries do |t|
puts a
...
end
C'est une utilisation typique des blocs de rubis. La méthode Create_table est définie dans ActiveRecord comme:
en C ++. : entrées code> est un symbole littéral, c'est une valeur littérale comme 7 code> ou "une chaîne" code>. Il n'y a rien à définir (incidemment, la fonction ne connaît pas le nom de votre contrôleur). t code> est le paramètre sur le bloc que vous avez transmis au Create_Tables < / code> méthode. Ce que vous avez écrit ici est grossièrement analogue à quelque chose comme: p> Create_Table CODE> appelle votre bloc et transmet le paramètre que vous avez nommé t code>. Je vous suggérerais d'obtenir un livre d'introduction pour ruby em> par opposition aux rails. Je vous recommande ruby pour rails em> par david A. noir. P> p>
: Les entrées font référence à la table des entrées dans les rails.
Le migrateur l'aurait connu à ce sujet lorsque la commande "Generate Controller" a été donnée aussi loin que je comprenne (travaillé avec des rails professionnels pendant un an, mais toujours l'apprentissage de ). p>
comme pour le | t | c'est un bloc. Pour citer le livre Pickaxe (que vous devez obtenir immédiatement une copie de PDF ou de la version de l'arbre mort): P>
Les blocs peuvent être utilisés pour définir un morceau de code qui doit être exécuté sous une sorte de contrôle transactionnel. Par exemple, vous ouvrirez souvent un fichier, faites quelque chose avec son contenu, puis vous voulez vous assurer que le fichier est fermé lorsque vous avez terminé. Bien que vous puissiez le faire en utilisant du code conventionnel, il existe un argument pour rendre le dossier responsable de la fermeture elle-même. Nous pouvons faire cela avec des blocs. P> blockQuote>
Alors, qu'est-ce qui se passe avec ci-dessus est que le | t | est le bloc qui gère la configuration de la connexion à la base de données, créant ainsi les lignes en fonction de leurs types spécifiques, puis la fermeture de la connexion. P>
Voici un autre exemple: p>
an_array = [1,2,3,4] an_array.each do |line|#line is the block for the elements of the array during iteration puts "Now we are at: #{line.to_s}!" end
Voici un lien vers la première édition du livre "Programmation Ruby" (AKA The Pickaxe Book) RubyCentral.com/book < / a>
La méthode Create_Table code> est ce que l'on appelle un bloc de rubis et t code> est une variable locale à ce bloc ( t code> est Juste une convention dans les migrations des rails qui représente une "table"). C'est un autre exemple plus évident d'un bloc rubis: : entrées code> est un symbole rubis, qui est une sorte de chaîne légère utilisée pour nommer des choses. Vous auriez également pu utiliser "entrées" code>. Une utilisation courante des symboles est destinée à spécifier les clés dans un hachage. Dans les deux cas, la table étant créée est nommée "entrées". P> p>
Les entrées sont la référence à votre modèle de saisie - chaque modèle suppose que le nom de la table sera identique à son nom, à l'exception de la tablette ( http://api.rubyonRails.org/classes/activeUpport/coreeextensions/string/inflections.html#m001653 ) P>
Le T est un paramètre de bloc passé dans la méthode Create_Table, voir http: // www .RubyCentral.com / Book / Tut_Containers.html Pour un meilleur exemple. Dans ce cas, il désigne la table créée ( http: // api.rubyonrails.org/classes/acterecord/connectiondapters/schemastats.html#m002191 ) p>
J'espère que cela devrait suffire à vous aider p>
Je travaille sur une application qui possède également une entrée très similaire à ce que vous regardez. P> premier off, première ligne, déclarant une classe appelée Suivant, déclarant une méthode de classe appelée appel suivant Un symbole (" passe également un bloc. P> li>
ol> Un bloc peut être enfermé par ... p> ou par p> un bloc peut prendre des paramètres joints par deux " Où est l'objet code> TableFinition code> vient? Cela se produit dans la méthode code source ActiveRecord ... p> entrée code> Modèle / entrées code> table. Voici ma migration: Createtries code> qui s'étend activeCord :: migration code>. p> up () code>. Une méthode de classe, par opposition à une méthode d'instance appartient à la classe plutôt qu'à des objets spécifiques de la classe. C'est le mot-clé " auto code>" qui l'oblige à être une méthode de classe. P> create_table () code> et le transmettant deux choses: p >
: entrées code>") qui, comme mentionné ci-dessus, est comme un littéral à chaîne. Cela indique à Activerecord ce que le tableau qu'il crée devrait être appelé. Disons que vous avez dactylographié ce code à la main - oubliez les générateurs pendant une minute. Vous avez tapé ": entrées code>" Parce que vous savez que par les tables de congrès dans une application de Rails sont nommées avec des noms pluriels et que vous savez que la classe modèle qui se connecte à cette table sera appelée entrée code>. p> li>
| code>" s. Dans ce cas, la méthode Create_Table code> passe au bloc Un objet de classe Tablefinition code>, afin de répondre à l'une de vos questions, t code> est le var tenant cet objet. Ensuite, à l'intérieur du bloc, nous appelons diverses méthodes d'instance de tablefinition code>. P> Create_Table () code>. Il contient le code qui instancie une nouvelle TableFinition code> objet et "rendements" sur le bloc .... p>
: Create_Table construira un objet code> TableFinition CODE>, puis cédez au bloc de code, fournissant cet objet à celui-ci. Dans le bloc du code, il sera nommé entrées code> est défini là-bas. Le code appelle la méthode create_table code> avec deux arguments - le nom souhaité de la table et un bloc de code. P>
t code>. Et enfin que le bloc de code appelle certaines méthodes sur t code> pour créer des colonnes. P>
Depuis, venant de Python, j'ai eu du mal à comprendre cette construction moi-même, je donnerai la traduction non spythonique de votre extrait de code.
Tout d'abord, vous devriez définir une fonction puis, pour chaque table, vous créeriez une fonction de configuration comme: p> Et enfin, vous créeriez la table en appelant: p> Ce n'est pas la façon dont il serait fait avec python. Si vous êtes intéressé par la manière de créer une table dans Python, vous devriez examiner comment Django ou sqlalchemy poignée que. p> p> créer_table code> comme ça Un (c'est juste un squelette): p>
Ne vous laissez pas duper en pensant que Ruby Do ... Les blocs de fin ou {} sont les mêmes que {} dans C / C ++ / Java: bien qu'ils puissent parfois être utilisés de cette façon, ils fonctionnent très différemment, comme vous le souhaitez. remarqué.