Ich lerne Ruby und RoR im Moment, und ich kam in diesem:Was ist der Sinn von "für x in y" in Ruby?
<% for post in @posts %>
im Rails guide. Ich habe verstanden, dass der idiomatische Weg, dies in Ruby zu tun mit ist:
<% @posts.each do |post| %>
Wenn es ein Unterschied dann ist das, was ist es? Und wenn es keinen Unterschied gibt, wäre es dann nicht besser für die Leute von Rails, richtige Ruby-Idiome zu pushen (anstatt das, was für mich pythonischer aussieht)?
Edit: Ich habe gerade zwei widersprüchliche Erklärungen dafür: Tutorials Point sagt sie das gleiche mit Ausnahme von „einer for-Schleife keinen neuen Rahmen für lokale Variablen erstellen“ sind, während CS.Auckland.ac.NZfor
sagt, ist nur syntaktischer Zucker für das Äquivalent .each
.
Edit2: Die for ... in
in Frage war für die in app/views/posts
von script/generate scaffold
erzeugt index.html.erb
. Ich habe eine schnelle Überprüfung durchgeführt und das generiert nun die .each
Syntax. Ich denke, dieser Teil des Leitfadens wurde in einem früheren Stadium der Schienenentwicklung geschrieben, als das Gerüst for ... in
erzeugte.
Edit3: Ich kann jetzt bestätigen, dass for x in y
in Rails 2.2.2 verwendet wurde, aber von 2.3.8 ist es y.each do |x|
verwenden. Nur damit du es weißt.
Danke! Genau das, was ich gesucht habe. Das bringt mich zurück zu meinem ursprünglichen Punkt, weshalb würde das Rails-Team (oder zumindest derjenige, der den Leitfaden für Erste Schritte geschrieben hat) mit der "for ... in" -Syntax umgehen? – Skilldrick
Es gibt viele Leute, die Schienen lernen, ohne zuerst Rubin gelernt zu haben. Ich nehme an, dass der Leitfaden in einem Stil geschrieben ist, der Menschen aus anderen Sprachen bekannt vorkommen soll. – sepp2k
Ein verwandter Unterschied zwischen den beiden, der nicht offensichtlich ist, nur aus diesem Beispiel: 'a = []; für x in [1,2,3,4]; ein << proc {x} Ende; map (&: call) 'ergibt' [4,4,4,4] ', während das Äquivalent zu' each ''[1,2,3,4]' ergibt, weil 'each' eine neue' x'-Bindung einführt mit jeder Iteration. – Chuck