【发布时间】:2014-09-21 09:51:46
【问题描述】:
我的想法是为来自java 背景的人创建一个社区 wiki,因为阅读了很多解释,直到我真正尝试了一些事情并且拼图的碎片开始出现之前,我无法理解任何东西找到他们的位置。但我首先需要确保我做对了。来自这样的背景让我很困惑地发现@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 执行的。那我在问什么?
- 我说对了吗?
- 我得到的 ruby 术语正确吗?
- 在正确设计的应用程序中有意义的类实例变量的任何实际用法?或者这些仅仅是更好的@@class 变量?
【问题讨论】:
-
重量*? :D 有趣的帖子。 +1
-
您可以将其称为类方法,但从技术上讲并非如此。这是单例类的方法看这个youtube.com/watch?v=X2sgQ38UDVY
-
@SamD,谢谢你的视频,我一定会看的。但我不明白为什么要称它为“单例类”。这意味着还有其他类型的类。称它为类对象的方法不是更好吗?所以它将是“类对象”与“类实例”,前者是代表类的对象,后者是该类的对象?
-
Singleton 类是一个匿名类,当你定义 self.method 匿名类(singleton)被初始化并添加到它的方法时,它隐藏在后台。之后的任何 self.method 都会添加到单例中
-
@SamD,对不起,我无法理解。也许它在我稍后会观看的视频中。但是当一切都是对象时,
class是什么?在任何情况下,它都会变得离题。我要问的是,当所有类都像您上面描述的那样时,为什么将其称为“单例类”而不是“类”。
标签: ruby instance-variables class-instance-variables