这段代码在我的书中,有两行我不明白。
# library.rb
class Library
def initialize
@books ={} #creating a new hash
end
def addBook(book)
@books[book.category]||=[] #category is a symbol. I DONT UNDERSTAND THIS LINE
@books[book.category] << book #AND THIS ONE
end
end
答案 0 :(得分:2)
@books ={}
以上行将创建一个新的哈希
@books[book.category]||=[]
这意味着@books
是Hash
而book.category
是key
,如果该密钥不存在则指定为空array
||=
- &gt;所以这意味着or-equals
||
表示如果@books
有值,则不会分配空数组,否则会将空array
因此,如果@books[book.category]
是Array
,您可以在其中插入尽可能多的category
值
在此行中,我们会将book
值插入哈希值,其中book.category
为key
@books[book.category] << book
如果你试试这个
@books ={}
@books[book.category].push(book) # This will give you the error `undefined method 'push' for nilclass`
,因为
@books[book.category].class will return NilClass
答案 1 :(得分:0)
a ||= b
表示&#34;如果a是logically false
(nil
,false
,undefined
),请为其指定b&#34;。你可以阅读更多关于||=
,被称为&#34;双管或等于&#34; here
因此,在您的代码中,@books[book.category] ||= []
表示如果[]
将books[book.category]
分配给nil
,则会将其分配给@books[book.category] << book
。保持不变。
然后,在下面的行(book
)中,<<
被附加({
)到数组。 请注意,您遇到语法错误(打开[
并使用{{1}}关闭)。