2010-07-23 11 views
7

Así que la tolerancia suelta de Ruby para usar llaves a veces y NO REQUIRE them me ha causado mucha confusión ya que estoy tratando de aprender Rails y cuándo/dónde usar cada uno y por qué?Tirantes: [Brackets], (paréntesis) & {Curlies} en Ruby & Rails

A veces se pasan los parámetros o valores como (@user, @comment) y otras veces parece ser [ :user => comment ] y aún otros es simplemente: :action => 'edit'

Estoy hablando de los EE.UU. de [] vs () vs {}

¿Cuáles son las reglas? ¿Y hay algún truco que debes ayudar a recordar?

+1

FYI, "{" y "}" son las únicas "tirantes". El término común para todos esos es corchetes. Cuando no se especifica, la palabra "corchetes" se refiere a corchetes. Nota – tster

Respuesta

21

paréntesis () son para agrupar expresiones lógicas o matemáticas y agrupar argumentos a una función, por ejemplo:

a = 2 * (3 + 4) 
b = (x==y) || (m==n) 
Hash.new.send('[]=', :a, :b) 

Curly Los apoyos {} se utilizan para literales y bloques de patata, por ejemplo:

h = {1=>2, 2=>3} 
h.each {|k,v| puts k+v} 

corchetes [] se utilizan para literales de matriz, matriz de indexación y el corte en lonchas, y ir a buscar a partir de un hash, por ejemplo:

arr = [1, 2, 3] 
two = arr[1] 
three = h[2] 

Para confundir el asunto, los literales hash también se pueden usar in situ como argumento para una llamada al método sin necesidad de llaves ni paréntesis, siempre que sea el último argumento (gracias a samuil). Además, los literales de hash se pueden utilizar en lugar de corchetes para crear una matriz de un solo artículo que contiene el hash:

puts 1=>2, 3=>4 #=> 1234 
[5=>6, 7=>8] #=> [{5=>6, 7=>8}] 

En caso de duda, siempre utilizar paréntesis para agrupar los elementos y envolver sus hashes entre llaves.

+4

, que las llaves se pueden omitir al pasar un hash de una función como argumento sólo si es el último. – samuil