Ruby类对象中的实例变量

Ruby类对象中的实例变量,ruby,Ruby,给定下面的Ruby代码,有人能帮助我理解@v和@@w之间的不同用例吗?我知道类C是类class的对象,因此,@v是类C对象的实例变量 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 每次创建对象时都会使用实例变量,如果它们未初始化,则它们有一个nil值,类变量需要初始化

给定下面的Ruby代码,有人能帮助我理解
@v
@@w
之间的不同用例吗?我知道类
C
是类
class
的对象,因此,
@v
是类
C
对象的实例变量

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

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

最大的原因之一是分类。如果您计划进行子分类,您可能希望使用类变量。这里有一个链接,介绍了这两种方法以及何时使用:

以下链接有助于描述两者之间的区别:

下面是我刚才提到的站点中的一些代码,显示了这两种方法的使用情况:

    #!/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()

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

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

相关阅读:


只要使用谷歌,就会有很多链接解释这些差异和使用案例。同时,也感谢您提供的见解!现在这就更有意义了