This page contains automated test results for code from O'Reilly's Ruby Cookbook. If this code looks interesting or useful, you might want to buy the whole book.
| Managing Instance Data | ||
|---|---|---|
| Code | Expected | Actual |
class Frog
def initialize(name)
@name = name
end
def speak
# It's a well-known fact that only frogs with long names start out
# speaking English.
@speaks_english ||= @name.size > 6
@speaks_english ? "Hi. I'm #{@name}, the talking frog." : 'Ribbit.'
end
end
Frog.new('Leonard').speak |
"Hi. I'm Leonard, the talking frog." | "Hi. I'm Leonard, the talking frog." |
lucas = Frog.new('Lucas')
lucas.speak |
"Ribbit." | "Ribbit." |
lucas.name |
NoMethodError: undefined method `name' for #<Frog:0xb7d0327c @speaks_english=true, @name="Lucas"> |
Error! (Exception?) Here's stdout: NoMethodError: undefined method `name' for #<Frog:0xb7c2ad68 @name="Lucas", @speaks_english=false> from (irb):15 |
class Frog attr_reader :name end lucas.name |
"Lucas" | "Lucas" |
lucas.speaks_english = false |
NoMethodError: undefined method `speaks_english=' for #<Frog:0xb7d0327c @speaks_english=false, @name="Lucas"> |
Error! (Exception?) Here's stdout: NoMethodError: undefined method `speaks_english=' for #<Frog:0xb7c2ad68 @name="Lucas", @speaks_english=false> from (irb):20 |
class Frog attr_accessor :speaks_english end lucas.speaks_english = true lucas.speak |
"Hi. I'm Lucas, the talking frog." | "Hi. I'm Lucas, the talking frog." |
class Frog
def speaks_english
@speaks_english
end
def speaks_english=(value)
@speaks_english = value
end
end
michael = Frog.new("Michael") |
#<Frog:0xb7cf14c8 @name="Michael"> | #<Frog:0xb7c135a0 @name="Michael"> |
michael.speak |
"Hi. I'm Michael, the talking frog." | "Hi. I'm Michael, the talking frog." |
michael |
#<Frog:0xb7cf14c8 @name="Michael", @speaks_english=true> | #<Frog:0xb7c135a0 @name="Michael", @speaks_english=true> |
michael.instance_variable_get("@name") |
"Michael" | "Michael" |
michael.instance_variable_set("@name", 'Bob')
michael.name |
"Bob" | "Bob" |
class Frog
define_method(:scientific_name) do
species = 'vulgaris'
species = 'loquacious' if instance_variable_get('@speaks_english')
"Rana #{species}"
end
end
michael.scientific_name |
"Rana loquacious" | "Rana loquacious" |