私はクラスの外のメソッドからクラス変数にアクセスしようとしています。ルビの外部からクラス変数にアクセスするには?
これが私のクラスである:
class Book
@@bookCount = 0
@@allBooks = []
def self.allBooks
@@allBooks
end
def self.bookCount
@@bookCount
end
attr_accessor :name,:author,:date,:genre,:rating
def initialize(name, author, date, genre, rating)
@name = name
@author = author
@date = date
@genre = genre
@rating = rating
@@bookCount += 1
@@allBooks << self
end
end
これはクラス変数にアクセスしようとする方法である@@はbookcount
def seeBookShelf
if @@bookCount == 0
puts "Your bookshelf is empty."
else
puts "You have " + @bookCount + " books in your bookshelf:"
puts allBooks
end
end
私はこれを取得する方法を実行しようとすると:
をundefined local variable or method `bookCount' for main:Object (NameError)
外部からbookCountにアクセスするにはどうすればよいですか?
最初の質問:なぜクラス変数を使用していますか?これらは、クラスとインスタンス間の情報を、しばしば懸念の混乱につながる方法で共有します。 'self.class.allBooks'は直接アクセスするよりも優れています。 – tadman
Rubyの規約では、 'see_book_shelf'のスタイルで変数名やメソッド名に大文字を使わずに名前を付けることを強くお勧めします。クラスには大文字と小文字が混在しています。 – tadman
作成されたブックインスタンスの参照が保持されるため、これは基本的にメモリの問題を求めています。この責任をBookのクラスレベルに委譲するのではなく、Bookを格納することを特に目的としたBookShelfクラスを作成する方がよいでしょう。 – tadman