Ruby中的哈希是什么?

时间:2015-03-20 15:10:44

标签: ruby

这段代码在我的书中,有两行我不明白。

# 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

2 个答案:

答案 0 :(得分:2)

@books ={}

以上行将创建一个新的哈希

@books[book.category]||=[] 

这意味着@booksHashbook.categorykey,如果该密钥不存在则指定为空array

||= - &gt;所以这意味着or-equals

||表示如果@books有值,则不会分配空数组,否则会将空array

因此,如果@books[book.category]Array,您可以在其中插入尽可能多的category

在此行中,我们会将book值插入哈希值,其中book.categorykey

   @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 falsenilfalseundefined),请为其指定b&#34;。你可以阅读更多关于||=,被称为&#34;双管或等于&#34; here

因此,在您的代码中,@books[book.category] ||= []表示如果[]books[book.category]分配给nil,则会将其分配给@books[book.category] << book。保持不变。

然后,在下面的行(book)中,<<被附加({)到数组。 请注意,您遇到语法错误(打开[并使用{{1}}关闭)。