r66  2021/04/07更新

atter_accessrとは?


A:クラスメソッドを外部から参照できるようになる

必要性

・rubyでクラス外からインスタンス変数にアクセスできないので、
このままでは、クラス外からインスタンス変数の参照や変更ができない!!

class User
    def initialize(name)
        @name = name
    end   
end

r = User.new('私です')
r.name

*クラス外でnameを参照しようとしているので、undefined method `name'が出る

atter_accessrを記入してみる

class User
 attr_accessor :name ←追加!!
    def initialize(name)
        @name = name
    end   
end
​
r = User.new('私です')
 p r.name
​
*atter_accessrにより、nameが参照でき、"私です"と出た!

解説

atter_accessrはインスタンス変数にアクセスするためのメソッドを設定してくれる。
よって、クラス外からでも、atter_accessrに指定した変数は参照も書き換えも可能!

何が起こっているか

atter_accessr:変数名と書くと、参照も書き換えも可能と上記で記入したが、
なぜ??

class User
atter_accessr:name ←これを書くと・・・
    def initialize(name)
     @name = name
    end 
   def name   ←@nameを呼び出すnameメソッドを裏で定義してくれる
    @name 
   end
    def name=(name)←@nameをを変更するためのメソッド裏で定義してくれる
    @name = name
    end
end


class User
atter_accessr:name, :age ←複数指定も可

タイトルとURLをコピーしました