Eventuali duplicati:
Ruby block and unparenthesized arguments
What is the difference or value of these block coding styles in Ruby?Perché non sono do/end e {} sempre equivalenti?
Ho sempre pensato che i seguenti sono solo due modi di dire la stessa cosa:
[1,2,3].collect{|i| i * 2}
[1,2,3].collect do |i|
i * 2
end
Ma io sono ottenere un comportamento strano in uno dei miei modelli ERB in cui la sintassi due sembra che facciano due cose diverse. Questo codice funziona alla grande:
<%=raw @menu.collect { |m|
content_tag("li") {
link_to(m.capitalize, url_for(:controller => m))
}
} %>
Ma quando ho ri-scrivere come:
<%=raw @menu.collect do |m|
content_tag("li") do
link_to(m.capitalize, url_for(:controller => m))
end
end %>
... Ho appena finisce con una stringa concatenata dei miei oggetti @menu. Mi sto perdendo qualcosa? C'è qualche piccolo chicco di zucchero sintattico che sta arrivando qui?
Questo è un duplicato di [Rubino blocco Errore di sintassi] (http://StackOverflow.Com/q/6854283/), [blocco di codice passato a 'each' lavora con staffe, ma non con' do'- 'end' (ruby)] (http://StackOverflow.Com/q/6718340/), [Definizione blocco - differenza tra parentesi e' do'-'end'?] (http://StackOverflow.Com/q/ 6179442 /), [Blocco multiplo di Ruby senza 'do'' fine'] (http://StackOverflow.Com/q/3680097/), [Uso di 'do' block vs parentets' {} '] (http: // StackOverflow .Com/q/2122380 /), [Qual è la differenza o il valore di questi stili di codifica dei blocchi in Ruby?] (Http://StackOverflow.Com/q/533008/) ... –
... e [Blocco ruby e argomenti non separati] (http://StackOverflow.Com/q/420147/). –
Ack! Ora sono diviso. Per cancellare o non cancellare? Con 4 upvotes, forse la mia formulazione è utile a qualcuno? –