相关疑难解决方法(0)

ruby:类实例变量vs实例变量

我的想法是为那些来自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进行的.那我在问什么?

  • 我做对了吗?
  • 我的红宝石术语是否正确?
  • 在正确设计的应用程序中有意义的类实例变量的任何实际用法?或者这些只是更好的@@类变量?

ruby instance-variables class-instance-variables

3
推荐指数
2
解决办法
1908
查看次数