2010-07-23 25 views
7

Donc, la tolérance lâche de Ruby pour utiliser des accolades parfois et ne pas les exiger a conduit à beaucoup de confusion pour moi que j'essaie de apprendre Rails et quand/où utiliser chacun et pourquoi?Accolades: [Brackets], (parenthèses) & {Curlies} dans Ruby & Rails

Parfois, les paramètres ou les valeurs sont transmises en tant que (@user, @comment) et d'autres fois, ils semblent être [ :user => comment ] et d'autres encore, il est juste: :action => 'edit'

je parle des États-Unis de [] vs () vs {}

Quelles sont les règles? Et y a-t-il des astuces pour vous aider à vous souvenir?

+1

FYI, "{" et "}" sont les seuls "accolades". Le terme commun pour tous ces termes est parenthèses. Lorsqu'il n'est pas spécifié, le mot «crochets» fait référence aux crochets. – tster

Répondre

21

Parenthèses () sont pour grouper des expressions logiques ou mathématiques et le regroupement des arguments à un appel de fonction, par exemple:

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

Accolades {} sont utilisés pour les littéraux de hachage et de blocs, par exemple:

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

Les parenthèses carrées [] sont utilisées pour les littéraux de tableau, l'indexation et le découpage de tableaux, et l'extraction à partir d'un hachage, par exemple:

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

Pour tromper le sujet, les littéraux de hachage peuvent également être utilisés sur place en tant qu'argument d'un appel de méthode sans avoir besoin des accolades ou des parenthèses tant qu'il s'agit du dernier argument (merci samuil). En outre, les littéraux de hachage peuvent être utilisés en place entre crochets pour créer un tableau à un seul élément contenant le hachage:

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

En cas de doute, utilisez toujours entre parenthèses à des éléments du groupe et envelopper vos hash accolades.

+4

Notez que les accolades peuvent être omises lors du passage d'un hachage à une fonction en tant qu'argument uniquement s'il s'agit du dernier. – samuil