

(※当方プログラミングを勉強して約1ヶ月になる初心者です。)  
質問をご覧いただきありがとうございます。  
あるRuby入門書を勉強している中で不明点が生じたため、質問いたしました。  
Rubyバージョンは ruby 2.6.5です。

不明点のあるコードは以下の通りです。

[code]

    class Product
      attr_reader :name, :price
    
    　def initialize(name, price)
        @name = name
        @price = price
      end
    
      def to_s
        "name: #{name}, price: #{price}"
      end
    end
    
    product = Product.new('A great movie', 1000)
    product.to_s  #=> "name: A great movie, price: 1000"
    
[/code]

以上のコードは継承が説明された章に書かれています。

私は、Productメソッドがto_sメソッドをオーバーライドしているのは理解しています。  
しかし、to_sメソッドの中で行われている、  
`"name: #{name}, price: #{price}"`  
でなぜ引数がname,priceとなっているのでしょうか。@name,@priceではないのでしょうか。

色々調べてみたのですが、分かりませんでした。  
よろしくお願いいたします。


CC BY-SA 4.0
2019-12-29T16:56:28.920
61877
2019-12-29T23:52:37.173
2019-12-29T23:52:37.173
2238
question
ruby
@の有無について


`attr_reader :name, :price`

とかくと name, price というメソッドが追加されて  
デフォルトは @付きの変数の値を読みます

つまり

`attr_reader :name`

は

[code]

    def name
      return @name
    end
    
[/code]

と同じことになります  
なので @ なしでも値の取得ができます

ちなみに attr_accessor のほうがよく使うと思うんですが setter も一緒につくので

[code]

    def name=(val)
     @name = val
    end
    
[/code]

もついてきます

[attr_reader (Module)](https://ref.xaio.jp/ruby/classes/module/attr_reader)


CC BY-SA 4.0
2019-12-29T17:53:40.320
61880
2019-12-29T17:53:40.320
61877
answer