2012-05-12 30 views
0

我越来越交手护栏及,而我觉得我进步有一两件事,我很努力去用交手,这是非常基本的。我想了解的[] {}()不同的使用是否有其使用的任何良好来源,并在那里你可以给初学者在识别时要使用一个或其他任何提示,或者我似乎在某些情况下,看当他们根本不需要时?
我知道这是非常基本的,但我一直在努力寻找能够简洁地解释它们与Ruby之间的相互作用的文献,或者特别是RoR回报率不同的括号标记

回答

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)

(我可能错过了一些东西,也不过有果壳)

。 0
+0

+1我完全忘记使用{}作为块分隔符。 – Ron

+1

我很感激。它以一种令人印象深刻的简洁方式为我阐明了一些事情。非常感激! – Tom

+0

@Tom没有汗水;这些信息可以在大多数Ruby指南中找到,但不一定都在一个地方。我应该在RoR中补充说,它主要是ERb模板,在使用帮助程序避免语法错误时有时需要小心 - 这很容易让人有点sl。。 –

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并开始声明变量和访问他们。

+0

方法调用中的参数个数并不是真正的歧义原因,当参数是一个方法调用等时,必须使用parens使词法分析器高兴。 –

+0

非常感谢,特别是关于数组和哈希嵌套的信息。 – Tom