@aはインスタンス変数ですのでインスタンスごとに値は違います。
ruby
1some1 = A.new
2some1.a = 1
3some2 = A.new
4some2.a = 2
5p some1.a == some2.a # -> false
@aaはクラス変数ですので,インスタンスが違っても値は同じになります。
ruby
1some1 = A.new
2some1.aa = 1
3some2 = A.new
4p some2.aa # -> 1
5p some2.aa = 2
6p some1.aa # -> 2
ところで上の例では,some1.aとかsome2.aとか変数aの値を設定したり,呼び出したりしてますが,設定するメソッドや呼び出すメソッドを定義してないので,本当はエラーになります。
そこで,そのようなメソッド(いわゆるアクセサ)をattr_accessor
で定義します。
superはオーバーライドメソッドを呼び出すものなので,クラスがA一つだと分かりにくいです。
ruby
1class B
2 def initialize #2
3 some scripts
4 end
5end
6class A < B
7 def initialize #1
8 super
9 end
10end
AはBを承継しているのでA.newをすると#1が呼び出され次に#2が呼び出されてsome scriptsを実行します。
しかし,superがないとA.newをしても#2は呼び出されません。
self.aのselfはこの場合Aのことです。なのでAのメソッドaを呼び出すことをしてます。
ruby
1class A
2 def a
3 somescripts
4 end
5end
が別のところで定義されていると考えて良いです。
クラスとインスタンス,変数とメソッドが整理されてないようなので,そこを理解できればわけないです。
バッドをするには、ログインかつ
こちらの条件を満たす必要があります。