我的想法是为那些来自java背景的人创建一个社区wiki,因为阅读了大量的解释,直到我真正尝试了几件事情并且拼图的各个部分开始找到他们的位置时,我无法理解任何事情.但我首先需要确保我做对了.从这样的背景来看,我发现这@variable可能意味着两件截然不同的事情让我非常困惑.这是一个例子:
class Test
@ins = "gah"
def self.ins
puts @ins
end
def initialize()
@ins = "wtf?"
end
def ins2
puts @ins
end
end
Run Code Online (Sandbox Code Playgroud)
据我所知,第一个@ins是表示类的对象的实例变量Test.第二个@ins是类对象中的实例变量Test.
现在事情开始对我有意义了.这里有几个例子:
[14] pry(main)> test.ins2
wtf?
Run Code Online (Sandbox Code Playgroud)
我们正在调用一个对象的方法,它返回对象的实例变量.
[15] pry(main)> test.ins
NoMethodError: undefined method `ins' for #<Test:0x000000017d9348 @ins="wtf?">
Run Code Online (Sandbox Code Playgroud)
我们试图通过一个对象调用一个类方法,这个方法属于类,所以我们得到了 NoMethodError
[16] pry(main)> Test.ins
gah
Run Code Online (Sandbox Code Playgroud)
我们正在调用一个类方法,因此它可以正确地看到类对象的实例变量.
[17] pry(main)> Test.ins2
NoMethodError: undefined method `ins2' for Test:Class
Run Code Online (Sandbox Code Playgroud)
我们通过类调用一个对象方法,这是不正确的抛出NoMethodError.
以上所有都是用ruby 2.0进行的.那我在问什么?