0

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

クラス変数を意味することは理解していますが、メソッド(コンストラクター)で@@変数を作成し、クラス変数であるかのように別のメソッド内で使用する方法がわかりません。initializeこれはどのように可能ですか?コンストラクターで定義できる場合、クラス変数を定義する意味は何ですか?

4

2 に答える 2

3

クラス (@@) 変数とインスタンス (@) 変数を混同していると思います。Ruby では、クラス変数は C++ の静的クラス変数に似ており、インスタンス変数は C++ の通常のクラス変数に似ています。

class Test
    @@cvar = 1
    def initialize
        @ivar = 0
    end
end

ほぼ同等です(申し訳ありませんが、私のC ++は錆びています):

class Test {
    public:
        Test() : ivar(0) {}
    private:
        static int cvar;
        int ivar;
};
int Test::cvar = 1;
于 2013-04-24T19:49:36.603 に答える