我是编程的初学者,我正在尝试为Ruby完成Zed Shaw的书,而我却无法理解代码的最后for
语句。如果尚未定义变量state
和abbrev
,那么软件如何知道从哪里获取值?
states = {
'Oregon' => 'OR',
'Florida' => 'FL',
'California' => 'CA',
'New York' => 'NY',
'Michigan' => 'MI'
}
cities = {
'CA' => 'San Francisco',
'MI' => 'Detroit',
'FL' => 'Jacksonville'
}
for state, abbrev in states
puts "%s state is abbreviated %s and has city %s" % [
state, abbrev, cities[abbrev]]
end
答案 0 :(得分:1)
这些变量仅在for
... end
次迭代中有效。它类似于块x
中的块变量,例如{|x| .... x ...}
。这些值分配给states
的每个元素,或者,如果它没有元素的自然感,则将应用to_a
。在下文中,e
被分配了states
,
for e in states
...
end
并在每次迭代时更改。由于states
是一个哈希值,因此它将是一个键值对数组,如['Oregon', 'OR']
。
但是还有一个复杂因素;这被称为破坏性任务。当在赋值期间变量和对象的数量不匹配时,Ruby会尝试分发它们以使其尽可能有意义。在这种情况下,您有两个变量state
和abbrev
,可以为['Oregon', 'OR']
分配一个数组。 Ruby分解该数组,并将其元素分配给每个变量:
state # => "Oregon"
abbrev # => "OR"
答案 1 :(得分:0)
在这种情况下,for
- in
构造遍历states
哈希;对于每个键值对,state
设置为键,abbrev
设置为值。因此,第一次,state
设置为'Oregon'
,abbrev
设置为'OR'
,然后state
设置为'Florida'
和{ {1}}设置为abbrev
,依此类推整个哈希。这就是定义'FL'
- for
语法在Ruby中工作的方式。