 
 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" |