@v
鉴于下面的 Ruby 代码,有人可以帮助我理解和之间的不同用例@@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
@v
鉴于下面的 Ruby 代码,有人可以帮助我理解和之间的不同用例@@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
值,并且类变量需要初始化,如果没有,它们会产生错误。
最大的原因之一是子分类。如果您计划子类化,则需要使用类变量。这是一个讨论两者以及何时使用什么的链接:
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()
实例变量的范围仅限于类的对象。例如。如果您通过创建对象来实例化 C 类,那么您可以访问 @v。
当类变量跨越类时,即它们对类(即对象)和其他类方法的实例也是可见的。
相关阅读:
http://www.railstips.org/blog/archives/2006/11/18/class-and-instance-variables-in-ruby/