Sto imparando Ruby e ROR in questo momento, e mi sono imbattuto in questo:Qual è il punto di "x in y" in Ruby?
<% for post in @posts %>
nel Rails guide. Avevo capito che il modo idiomatico per fare questo in Ruby è con:
<% @posts.each do |post| %>
Se c'è una differenza, allora che cosa è? E se non c'è una differenza, non sarebbe meglio per le persone di Rails spingere i propri idiomi Ruby (piuttosto che questo, che per me sembra più pitonico)?
Edit: ho appena trovato due spiegazioni contrastanti di questo: Tutorials Point dice che sono gli stessi, tranne "un ciclo for non crea un nuovo ambito per le variabili locali", mentre CS.Auckland.ac.NZ dice for
è solo sintattico zucchero per l'equivalente .each
.
Edit2: La for ... in
in questione era per la index.html.erb
generata in app/views/posts
da script/generate scaffold
. Ho eseguito un controllo rapido e ora viene generata la sintassi .each
. Immagino che parte della guida sia stata scritta in uno stadio precedente dello sviluppo delle rotaie quando lo scaffold ha generato for ... in
.
Edit3: ora posso confermare che for x in y
è stato utilizzato in Rails 2.2.2, ma 2.3.8 sta usando y.each do |x|
. Solo per quello che sai.
Grazie! Esattamente quello che stavo cercando. Questo mi riporta al punto originale, per cui il team di Rails (o almeno chi ha scritto la guida introduttiva) dovrebbe seguire la sintassi 'for ... in'? – Skilldrick
C'è un sacco di persone che imparano i binari senza aver imparato prima il rubino. Suppongo che la guida sia scritta in uno stile che ha lo scopo di sembrare familiare alle persone che provengono da altre lingue. – sepp2k
Una differenza correlata tra i due che non è evidente solo da quell'esempio: 'a = []; per x in [1,2,3,4]; una fine << proc {x}; map (&: call) 'dà' [4,4,4,4] 'mentre l'equivalente con' each' darebbe '[1,2,3,4]' perché 'each' introduce una nuova legatura' x' con ogni iterazione. – Chuck