0

@v以下の Ruby コードが与えられた場合、との間のさまざまなユースケースを理解するのを手伝ってくれる人はいます@@wか? Cclassは class のオブジェクトであり、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
4

2 に答える 2

1

インスタンス変数のスコープは、クラスのオブジェクトに限定されています。たとえば。オブジェクトを作成してクラスCをインスタンス化すると、@vにアクセスできるようになります。

一方、クラス変数はクラス全体にまたがっています。つまり、クラス(つまりオブジェクト)や他のクラスメソッドのインスタンスにも表示されます。

関連読書:

クラス変数とクラスインスタンス変数の違いは?

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

于 2013-01-30T01:06:58.913 に答える
1

インスタンス変数はオブジェクトが作成されるたびに使用され、初期化されていない場合はnil値があり、クラス変数を初期化する必要があり、そうでない場合は生成されてエラーになります。

最大の理由の 1 つは、サブクラス化です。サブクラス化を計画している場合は、クラス変数を使用する必要があります。この 2 つと、いつ何を使用するかについて説明しているリンクを次に示します。

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

2つの違いを説明するのに役立つリンクは次のとおりです。

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()
于 2013-01-30T01:02:13.103 に答える