0

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

4

2 回答 2

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。)

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

于 2012-05-12T17:52:31.903 回答
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 }

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

puts(string)
puts string

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

于 2012-05-12T18:01:28.717 回答