我的想法是为来自java
背景的人创建一个社区维基,因为阅读了很多解释,直到我真正尝试了一些事情并且拼图的碎片开始找到它们的位置之前,我无法理解任何东西。但我首先需要确保我做对了。来自这样的背景让我很困惑地发现这@variable
可能意味着两件非常不同的事情。这是一个例子:
class Test
@ins = "gah"
def self.ins
puts @ins
end
def initialize()
@ins = "wtf?"
end
def ins2
puts @ins
end
end
据我了解,第一个@ins
是代表类的对象的实例变量Test
。第二个@ins
是类对象中的实例变量Test
。
现在事情开始对我有意义了。这里有几个例子:
[14] pry(main)> test.ins2
wtf?
我们正在调用对象的方法,它返回对象的实例变量。
[15] pry(main)> test.ins
NoMethodError: undefined method `ins' for #<Test:0x000000017d9348 @ins="wtf?">
我们试图通过一个对象调用一个类方法,这个方法是类的,所以我们得到NoMethodError
[16] pry(main)> Test.ins
gah
我们正在调用一个类方法,以便它正确地看到类对象的实例变量。
[17] pry(main)> Test.ins2
NoMethodError: undefined method `ins2' for Test:Class
我们通过不正确的类调用对象方法,因此抛出NoMethodError
。
以上所有操作均使用 ruby 2.0 进行。那我在问什么?
- 我做对了吗?
- 我得到的红宝石术语正确吗?
- 在正确设计的应用程序中,任何对类实例变量的实际使用都有意义?或者这些仅仅是更好的@@class 变量?