我相信这句话说"如果school[grade]
为真,那么就把name
铲进去。如果它是假的,那么给它一个值[]
,然后将name
铲入其中:
(@school[grade] || @school[grade] = []) << name
如果是,那么这应该等同于以下几行:
if @school[grade] == true
@school[grade] << name
else
@school[grade] = []
@school[grade] << name
end
但它似乎没有成功。我无法弄清楚我在这里失踪了什么。
答案 0 :(得分:1)
x == true
检查x
是否等于true
,而不是x
是否真实(这是一个数组)。使用if @school[grade]
。
irb(main):001:0> !!5
=> true
irb(main):002:0> 5 == true
=> false
答案 1 :(得分:1)
在Ruby中nil
为false,非nil
(除false
之外)为真。所以这是一个更好的翻译:
if @school[grade] # if @school[grade] isn't nil or false
@school[grade] << name # append name to it
else
@school[grade] = [] # otherwise give it an empty array
@school[grade] << name # and then append name to it
end
else
子句可以缩减为一行:@school[grade] = [name]
。