RoR不同的括号表示法

时间:2012-05-12 17:48:02

标签: ruby ruby-on-rails-3

我正在掌握铁轨,虽然我觉得我正在进步,但有一件事我很难掌握,这是非常基本的。我正在尝试了解[] {}()的不同用法。它们的使用是否有任何好的来源,是否有任何提示可以让初学者知道何时使用其中一个,或者我似乎在某些情况下看到它们根本不需要它们? 我知道这是非常基本的,但我一直在努力寻找能够简洁地解释它们与Ruby之间或者特别是RoR之间的相互作用的文献

2 个答案:

答案 0 :(得分:4)

与RoR无关;各种括号是Ruby语言结构。

[]是数组运算符,用于实现它的数组和其他类(比如获取子字符串的字符串,或查找键值的哈希值):

a = [1, 2, 3]
a.each { |n| puts n }

s = "ohai"
puts s[1..-1]

h = { foo: "bar", baz: "plugh" }
puts h[:foo]

{}用于哈希,以及两种分隔块的方法之一(另一种是begin / end)。 (并与#一起用于字符串插值。)

h = { foo: "bar", baz: "plugh" }
h.each { |k, v| puts "#{k} == #{v}" }

()用于方法参数,或用于在表达式中强制执行评估顺序。

 > puts 5 * 3 + 5     # Normal precedence has * ahead of +
=> 20
 > puts 5 * (3 + 5)   # Force 3+5 to be evaluated first
=> 40

def foo(s)
  puts(s)
end

如果陈述没有歧义,它们有时是可选的:

def foo s
  puts s
end

(他们不是总是可选,并且在方法调用和其括号参数列表之间放置一个空格可能会导致问题 - 最好不要,IMO。)

(我可能也错过了一些东西,但简而言之。)

答案 1 :(得分:1)

[]用于访问哈希(通过键)或数组(通过索引)内的对象。

hash[:key] # returns a value
array[0]   # returns the first array element

[]用于描述数组。

array = ['a', 'b', 'c']

当然这可以嵌套。

nested = [['a','b','c'], [1,2,3]]

[]可用于声明哈希,但这是因为哈希类可以接受数组。

hash = Hash[['a',1], ['b',2]] # { 'a' => 1, 'b', => 2 }

{}用于声明哈希。

hash = { 'a' => 1, 'b' => 2 }

这也可以嵌套。

hash = { 'a' => { 'c' => 3 }, 'b' => { 'd' => 4 } }

{}也用于分隔块。 .each方法很常见。以下两个代码块是等效的。

array.each do |n|
    puts n
end

array.each { |n| puts n }

在歧义需要澄清的情况下,()仅用于分组。在采用许多参数的方法中尤其如此,其中一些可能是零,其中一些可能是对象等等。您将看到许多代码完全省略它们,因为为了清晰起见,不需要分组。

puts(string)
puts string

我建议启动rails console并开始声明变量并访问它们。