2014-06-12 49 views

回答

1

keysAndValues方法確實返回單個陣列(在其內部兩個陣列),但它的輸出可以被解釋爲兩個陣列。讓我來解釋:

single_array = ["hello", "world"] 
puts single_array # => ["hello", "world"] 
first_element, second_element = single_array 
puts first_element # => "hello" 
puts second_element # => "world" 

原因這個符號可能是Ruby的分配(=)運算符的實現。因此,調用a, b = keysAndValues(data)將填充變量ab。但要注意,雖然結果在技術上是有道理的,這可能在某些情況下出現意外:

first, second = 1 # first is 1, second is nil 

也有一些其他用途多重分配,考慮以下情況:

a, b, *c = [1, 2, 3, 4] # note the asterisk symbol here 
puts a # => 1 
puts b # => 2 
puts C# => [3,4] 
1

Ruby支持並行任務。這是一個簡單的例子:

foo, bar = 1, 2 
foo # => 1 
bar # => 2 

你的方法返回一個數組內的兩個值:

keys_and_values(
    { 
    a: 1,      
    b: 2      
    }       
).size # => 2 
,其經由 =分配給這兩個值在等式的左邊

。的數組中的值是在keysvalues子陣列位於出處:

foo, bar = keys_and_values(
    { 
    a: 1,      
    b: 2      
    }       
) 

foo.object_id # => 70159936091440 
bar.object_id # => 70159936091420 

Ruby是不與支持並行分配唯一的;它也用於其他語言。任何體面的Ruby手冊都會談論這個。這很好理解,因爲賦值給變量或者將多個參數傳遞給方法是Ruby中會反覆遇到的問題。做a search欲瞭解更多信息。

另外,在Ruby中,我們沒有命名使用camelCase的方法,比如「keysAndValues」。相反,我們使用snake_case:keys_and_values

+0

「列表分配」不是「並行」 – gaussblurinc

+0

它是平行的,列表,取決於您之前使用的語言。看看搜索的結果;很明顯,人們都使用兩者。 –

+0

對不起,我的錯 – gaussblurinc