我遇到了这个方法定义:
def stock_folder_map
res = {}
folders.each { |ff|
ff.stocks.each { |s|
res[s["id"]] = ff["name"]
}
}
end
谁能说出什么res = {}
和res[s["id"]] = ff["name"]
意思?
我遇到了这个方法定义:
def stock_folder_map
res = {}
folders.each { |ff|
ff.stocks.each { |s|
res[s["id"]] = ff["name"]
}
}
end
谁能说出什么res = {}
和res[s["id"]] = ff["name"]
意思?
您正在构建一个名为res
. 您正在遍历 everystock
中的 every folder
,并创建一个新元素,res
其中键是股票的 id,值是文件夹的名称。
res = {}
正在为变量分配res
一个新的空Hash 对象。
res[s["id"]] = ff["name"]
正在分配s["id"]
从另一个哈希中检索到的任何键的值,ff
。
因此,例如,如果[s["id"]]
评估为:foo
并ff["name"]
评估为"bar"
,则上述内容等同于:
res[:foo] = "bar"
现在这些[]
是通过提供密钥来访问散列的文字。在这种情况下,键是:
s["id"]
(这是另一个哈希)用于res
哈希和"name"
为ff
哈希。s
很可能是另一个哈希。
res = {}
声明一个局部变量res
并为其分配一个空哈希。哈希是使用索引[]
的,在 Ruby 术语中,这意味着哈希实例响应消息并产生一些与传递给的[]
键值相对应的值[]
。
同时folders.each
将folders
集合的每个元素依次生成给循环体,将每个元素依次分配给循环变量ff
。鉴于其用法,ff
必须同时响应stocks
和[]
。一种可能的方法ff
是,它是一个类的实例,ClassOfFF
如下所述:
class ClassOfFF
def stocks
# Yield a collection (implementing Enumerable, for example)
end
def [](key)
# Yield the element at "key"
end
end
返回的集合中的每个对象stocks
必须自己响应[]
。例如,这些对象也可能是明确响应[]
like的另一个类的哈希或实例ClassOfFF
。
该语句同时res[s["id"]] = ff["name"]
调用and并将 的值分配给with key中的元素。[]
ff
ss
ff["name"]
res
s["id"]
res = {}
is an Hash object.res[s["id"]]
is an Hash of Hash.ff["name"]
is another Hash.res[s["id"]] = ff["name"]
means you are putting the value of the Hash ff
at key "name"
,to the value (which is a key of res
) of the Hash s
at key "id"
.
一些可能有帮助的伪代码。
def stock_folder_map
res = {} # creates a new hash map named 'res'
folders.each { |ff| # for each folder in folders (ff = folder)
ff.stocks.each { |s| # for each stock in ff.stocks (s = stock)
# we see that s is a hash map
res[s["id"]] = ff["name"] # let id = s["id"] i.e. s.get("id") in java
# let name = ff["name"] i.e. ff.get("name") in java
# assign value in res i.e. res.put(id, name) in java
}
}
end
Hashes的文档可能很有用。