I'm trying to understand what type of variable @bar is, in the code below.
class Foo
@bar = 7 # defined outside of initialize method
def self.bar # defined on the class, not as an instance method
@bar
end
end
- It uses the single
@notation, which makes it an instance variable - But because it's defined outside of an
initializemethod, I think it becomes an instance variable on theFooclass, not an instance variable on instances ofFoo
If ^^^ is correct, then I guess I just want to understand the possible uses of this. I was doing something like this recently in order to memoize something similar to the following:
class FileCache
@cache = {}
def self.read(filename)
@cache[filename] ||= File.read(filename)
end
end
The intention of the FileCache::read method is prevent going out to the file system every time you want to read a given file. It seems to work with @cache defined on the class (rather than via attr_reader or inside of initialize), and I just want to make sure I understand why.
It seems like what's happening is that @cache becomes an instance variable of the Singleton object FileCache, which itself is an instance of the Class class.
Is ^^^ anywhere near a correct understanding? I've also tried reading this artcile. Looking for someone who knows to confirm/deny my understanding.