simple code doesnt work

V

Vince /.

Hi everyone,

Can anyone tell me why this doesnt work?

Im getting this error
cf.rb:26: undefined method `price' for #<Ticket:0x27ed554
@d="11/12/2006", @price=5.0, @v="yer"> (NoMethodError)

thanks, just learning :)


class Ticket

def initialize(venue,date)
@v = venue
@d = date
end

def venue
@v
end

def date
@d
end

def price=(amount)
@price = amount
end
end

ticket = Ticket.new("yer","11/12/2006")
puts "ticket stuff is #{ticket.venue} #{ticket.date}"

ticket.price = (5.00)

puts "ticket mooch is #{ticket.price}"
 
V

Vincent Fourmond

Hello Vince ;-) !
Im getting this error
cf.rb:26: undefined method `price' for #<Ticket:0x27ed554
@d="11/12/2006", @price=5.0, @v="yer"> (NoMethodError)

thanks, just learning :)


class Ticket
[...]
def price=(amount)
@price = amount
end
end

ticket = Ticket.new("yer","11/12/2006")
puts "ticket stuff is #{ticket.venue} #{ticket.date}"

ticket.price = (5.00)

puts "ticket mooch is #{ticket.price}"

You define the price= method, but you don't define the price method.
You can't access to instance variables from outside the instance unless
you explicitly allow it via appropriate accessors. In your case,
replacing the price= definition by

attr_accessor :price

should work pretty well. You might want to use attr_reader to only grant
read acces to an instance variable or attr_writer to only grant write
access.

Enjoy !

Vince (yet another one...)
 
E

El Draper

Hey,
Hi everyone,

Can anyone tell me why this doesnt work?

*snip*
Sure, where you've got a method "price=(amount)", below:
def price=(amount)
@price = amount
end
this only handles the assigning of the price variable. This means that:
ticket.price = (5.00)
works fine, but trying to access ticket.price results in the error
you're seeing (hence why the error doesn't occur on the above line, but
on a later line). You simply need a method declaration for retrieving
the variable value within your class, so try putting this in there:

def price
@price
end

This then ensures you've got one method ("price=") that handles the
assignation of values, and one method ("price") to retrieve the current
value.

Your following code should then work:
puts "ticket mooch is #{ticket.price}"
Hope that helps!

Cheers,
-= El =-

blog: http://www.crazycool.co.uk
 
J

Jan Svitok

Hi everyone,

Can anyone tell me why this doesnt work?

Im getting this error
cf.rb:26: undefined method `price' for #<Ticket:0x27ed554
@d="11/12/2006", @price=5.0, @v="yer"> (NoMethodError)

thanks, just learning :)


class Ticket

def initialize(venue,date)
@v = venue
@d = date
end

def venue
@v
end

def date
@d
end

def price=(amount)
@price = amount
end
end

ticket = Ticket.new("yer","11/12/2006")
puts "ticket stuff is #{ticket.venue} #{ticket.date}"

ticket.price = (5.00)

puts "ticket mooch is #{ticket.price}"

You need to define attribute reader:

def price
@price
end

BTW, you could accomplish the same by using
attr_reader(R)/attr_writer(W)/attr_accessor(RW):
(if you'd rename @v, @d to @venue, @date respectively)
class Ticket

def initialize(venue,date)
@venue, @date = venue, date
end
attr_reader :venue, :date # this will create venue() and date()
attr_accessor :price # this will create price=() and price()
 
M

MonkeeSage

Vince said:
def price=(amount)
@price = amount
end
end

Hi there,

You have a price= method defined, but not a price method. So when you
say ticket.price there is no method for that.

Try this in your class:

def price
@price
end

Regards,
Jordan
 

Ask a Question

Want to reply to this thread or ask your own question?

You'll need to choose a username for the site, which only take a couple of moments. After that, you can post your question and our members will help you out.

Ask a Question

Members online

Forum statistics

Threads
473,769
Messages
2,569,582
Members
45,057
Latest member
KetoBeezACVGummies

Latest Threads

Top