因为Ruby的宽松容错性,有时可以使用括号,而不是强制要求使用括号,这给我在学习Rails时何时/在哪里使用每个括号以及为什么使用它们带来了很多困惑。
有时参数或值会作为(@user, @comment)
传递,而其他时候它们似乎是[ :user => comment ]
,还有一些只是::action => 'edit'
我说的是[ ] vs ( ) vs { }的用法。
规则是什么?你有什么技巧可以帮助你记住吗?
因为Ruby的宽松容错性,有时可以使用括号,而不是强制要求使用括号,这给我在学习Rails时何时/在哪里使用每个括号以及为什么使用它们带来了很多困惑。
有时参数或值会作为(@user, @comment)
传递,而其他时候它们似乎是[ :user => comment ]
,还有一些只是::action => 'edit'
我说的是[ ] vs ( ) vs { }的用法。
规则是什么?你有什么技巧可以帮助你记住吗?
括号()
用于分组逻辑或数学表达式以及函数调用的参数,例如:
a = 2 * (3 + 4)
b = (x==y) || (m==n)
Hash.new.send('[]=', :a, :b)
花括号{}
用于哈希字面量和块,例如:
h = {1=>2, 2=>3}
h.each {|k,v| puts k+v}
方括号[]
用于数组字面量,数组索引和切片,以及从哈希表中获取值,例如:
arr = [1, 2, 3]
two = arr[1]
three = h[2]
为了让事情更加混乱,哈希字面量也可以作为参数直接传递给方法调用,无需花括号或者括号,只要它是最后一个参数即可(感谢samuil)。此外,哈希字面量还可以在方括号中使用,以创建包含哈希的单项数组:
puts 1=>2, 3=>4 #=> 1234
[5=>6, 7=>8] #=> [{5=>6, 7=>8}]
如果有疑问,始终使用括号将项分组,并用花括号包装哈希。