2012-05-12 33 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