我的想法是为来自不同国家的人们创建一个社区维基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 变量?