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
initialize
method, I think it becomes an instance variable on theFoo
class, 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.