From: Ryan Victory Date: 2013-02-06T05:29:48+09:00 Subject: Re: using an instance variable inside a method This is a multi-part message in MIME format. --------------010904030009050202010600 Content-Type: text/plain; charset=windows-1252 Content-Transfer-Encoding: 8bit The code is correct, however I see how it could be confusing. BookInStock#price is an attribute of the BookInStock instance. This is defined by the "attr_accessor :price" line, which essentially defines two methods for you: def price @price end def price= value @price = value end The line you're questioning uses the automatically created accessor method, hence your confusion. It is arguable which method is more correct, however. Hopefully that clears it up, Ryan Victory On 2/5/13 2:26 PM, Colby Callahan wrote: > @price is an instance variable not a class variable ($price) I believe. > > > > > On Tue, Feb 5, 2013 at 12:17 PM, FirstName Surname > > wrote: > > Hello. > > I'm learning ruby 1.9 by reading the book "Programming Ruby 1.9 > The Pragmatic Programmers� Guide" > > Actually i'm on the page 57 and i think something is wrong. Let's show > the involved code : > > #--- > # Excerpted from "Programming Ruby", > # published by The Pragmatic Bookshelf. > # Copyrights apply to this code. It may not be used to create training > material, > # courses, books, articles, and the like. Contact us if you are in > doubt. > # We make no guarantees that this code is fit for any purpose. > # Visit http://www.pragmaticprogrammer.com/titles/ruby3 for more book > information. > #--- > class BookInStock > > attr_reader :isbn > attr_accessor :price > > def initialize(isbn, price) > @isbn = isbn > @price = Float(price) > end > > def price_in_cents > Integer(price*100 + 0.5) > end > # ... > end > book = BookInStock.new("isbn1", 33.80) > puts "Price = #{book.price}" > puts "Price in cents = #{book.price_in_cents}" > > > About the method price_in_cents, i think it should be written like > that > instead : > > def price_in_cents > Integer(@price*100 + 0.5) > end > > Simply because unless i'm really missing something, "price" is a class > attribute after all there, it seems that in this case the "@" is > implicit, but that doesn't look the appropriate way to write it, > right ? > Anyway i've tested with and without the "@", the result is the same. > > So is this a common practice in ruby or what ? > > Thx for reading. > > -- > Posted via http://www.ruby-forum.com/. > > --------------010904030009050202010600 Content-Type: text/html; charset=windows-1252 Content-Transfer-Encoding: 8bit The code is correct, however I see how it could be confusing.

BookInStock#price is an attribute of the BookInStock instance. This is defined by the "attr_accessor :price" line, which essentially defines two methods for you:

def price
� @price
end

def price= value
� @price = value
end

The line you're questioning uses the automatically created accessor method, hence your confusion. It is arguable which method is more correct, however.

Hopefully that clears it up,
Ryan Victory

On 2/5/13 2:26 PM, Colby Callahan wrote:
@price is an instance variable not a class variable ($price) I believe.




On Tue, Feb 5, 2013 at 12:17 PM, FirstName Surname <lists@ruby-forum.com> wrote:
Hello.

I'm learning ruby 1.9 by reading the book "Programming Ruby 1.9
The Pragmatic Programmers� Guide"

Actually i'm on the page 57 and i think something is wrong. Let's show
the involved code :

#---
# Excerpted from "Programming Ruby",
# published by The Pragmatic Bookshelf.
# Copyrights apply to this code. It may not be used to create training
material,
# courses, books, articles, and the like. Contact us if you are in
doubt.
# We make no guarantees that this code is fit for any purpose.
# Visit http://www.pragmaticprogrammer.com/titles/ruby3 for more book
information.
#---
class BookInStock

� attr_reader � :isbn
� attr_accessor :price

� def initialize(isbn, price)
� � @isbn �= isbn
� � @price = Float(price)
� end

� def price_in_cents
� � Integer(price*100 + 0.5)
� end
� # ...
end
book = BookInStock.new("isbn1", 33.80)
puts "Price � � � � �= #{book.price}"
puts "Price in cents = #{book.price_in_cents}"


About the method price_in_cents, i think it should be written like that
instead :

� def price_in_cents
� � Integer(@price*100 + 0.5)
� end

Simply because unless i'm really missing something, "price" is a class
attribute after all there, it seems that in this case the "@" is
implicit, but that doesn't look the appropriate way to write it, right ?
Anyway i've tested with and without the "@", the result is the same.

So is this a common practice in ruby or what ?

Thx for reading.

--
Posted via http://www.ruby-forum.com/.


--------------010904030009050202010600--