请解释这段代码如何返回两个数组。
def keysAndValues(data)
[data.keys, data.values]
end
答案 0 :(得分: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)
会使变量a
和b
都填满。但请注意,虽然结果在技术上有意义,但在某些情况下可能会出乎意料:
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 :(得分:1)
Ruby支持并行分配。这是一个简单的例子:
foo, bar = 1, 2
foo # => 1
bar # => 2
您的方法在数组中返回两个值:
keys_and_values(
{
a: 1,
b: 2
}
).size # => 2
通过=
分配给等式左边的两个值。数组中的值是对keys
和values
子数组所在位置的引用:
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
。