【问题标题】:Instance variables in a Ruby Class object [duplicate]Ruby 类对象中的实例变量 [重复]
【发布时间】:2013-01-30 00:56:29
【问题描述】:

鉴于下面的 Ruby 代码,有人可以帮我理解 @v@@w 之间的不同用例吗?我知道C 类是Class 类的一个对象,因此,@vC 类对象的一个​​实例变量。

class C
  @v = "I'm an instance variable of the class C object."
  puts @v

  @@w = "I'm a class variable of the class C."
  puts @@w
end

【问题讨论】:

标签: ruby


【解决方案1】:

实例变量的作用域仅限于类的对象。例如。如果你通过创建一个对象来实例化 C 类,那么你就可以访问@v。

类变量跨越整个类,即它们对类的实例(即对象)和其他类方法也是可见的。

相关阅读:

Difference between class variables and class instance variables?

http://www.railstips.org/blog/archives/2006/11/18/class-and-instance-variables-in-ruby/

【讨论】:

  • 感谢您的见解!这现在更有意义了
【解决方案2】:

每次创建对象时都会使用实例变量,如果它们未初始化,则它们具有nil 值,并且需要初始化类变量,如果没有,它们会产生错误。

最大的原因之一是子分类。如果您计划子类化,则需要使用类变量。这是一个讨论两者以及何时使用什么的链接:

http://www.railstips.org/blog/archives/2006/11/18/class-and-instance-variables-in-ruby/

这是一个有助于描述两者之间区别的链接:

http://www.tutorialspoint.com/ruby/ruby_variables.htm

这是我刚刚提到的网站上的一些代码,显示两者都在使用:

    #!/usr/bin/ruby

class Customer
   @@no_of_customers=0
   def initialize(id, name, addr)
      @cust_id=id
      @cust_name=name
      @cust_addr=addr
   end
   def display_details()
      puts "Customer id #@cust_id"
      puts "Customer name #@cust_name"
      puts "Customer address #@cust_addr"
    end
    def total_no_of_customers()
       @@no_of_customers += 1
       puts "Total number of customers: #@@no_of_customers"
    end
end

# Create Objects
cust1=Customer.new("1", "John", "Wisdom Apartments, Ludhiya")
cust2=Customer.new("2", "Poul", "New Empire road, Khandala")

# Call Methods
cust1.total_no_of_customers()
cust2.total_no_of_customers()

【讨论】:

    猜你喜欢
    • 1970-01-01
    • 2012-08-27
    • 2012-11-16
    • 2014-06-18
    • 2018-06-22
    • 2014-09-21
    • 2012-05-18
    • 2013-03-24
    • 2013-11-26
    相关资源
    最近更新 更多