Rubyのアクセサメソッドについて
学習したはずのアクセサメソッド。
class Car attr_accessor :name ,:price def initialize(name,price) @name = name @price = price end end car = Car.new('Prius',250_000) car.name => 'Prius' car.price => 250_000
以上のコードを見て、バカな私は
def name @name = name end
のように定義してないじゃないか!!!!!!!!!!
何で使えるんだ?!の様に変な思考に入り、混迷を極めてしまった。もしかしたらmoduleクラスのnameメソッド
を使っているのかと調べてドキュメントを見ても、見当違いの事が書いてあった。悩んで解決せず、メンターの駒形さんに聞くと、「アクセサメソッドにはセッターとゲッターがあって、nameメソッドを定義していると一緒の事になる」と説明を頂き、クリアになると共に、cherry本でやったではないかと、自分のばかさにホトホト呆れるほかありませんでした。
もしかしたら同じ失敗をして時間を無駄にしようとしている人、そして自分の備忘録の為に書きました。もう忘れません!
因みにattr_accessor
はattr_reader
とattr_writer
を一緒にまとめたもので、
class Car attr_reader :name ,:price # 同義 # def name # @name #end # def price # @price #end attr_writer :name,:price #同義 #def name=(value) # @name = (value) #end #def price=(value) # @price = (value) # end def initialize(name,price) @name = name @price = price end end car = Car.new('Prius',250_000) car.name => 'Prius' car.price => 250_000 car.name = 'Crown' # イコールの両サイドにスペース! => 'Crown'
と書く事ができ、通常同義
の部分はdef initialize
などの下から定義するのですが、比較の為attr
の後に記述しました。
何かあればご指摘いただけると幸いです!