Reputation: 116
I have a crux in ruby code(excerpt from this page):
#!/usr/bin/env ruby
class MegaGreeter
attr_accessor :names
#create the object
def initialize(names = "World")
@names = names
end
# say hi to everybody
def say_hi
if @names.nil?
puts "..."
elseif @names.respond_to?("each")
# @names is a list of some kind,iterate!
@names.each do |name|
puts "Hello #{name}!"
end
else
puts "Hello #{@names}!"
end
end
# say bye to everybody
def say_bye
if @names.nil?
puts "..."
elseif @names.respond_to?("join")
puts "Goodbye #{@names.join(",")}. Come back soon."
else
puts "Goodbye #{@names}. Come back soon."
end
end
end
if __FILE__ == $0
mg = MegaGreeter.new
mg.say_hi
mg.say_bye
# change name to be "Zeke"
mg.names = "Zeke"
mg.say_hi
mg.say_bye
# change the name to an array of names
mg.names = ["Albert", "Brenda", "Charles", "Dave", "Engelbert"]
mg.say_hi
mg.say_bye
# change to nil
mg.names = nil
mg.say_hi
mg.say_bye
end
When I run this script with ruby command, it prints:
Hello World!
Goodbye World. Come back soon.
Hello Zeke!
Goodbye Zeke. Come back soon.
Hello ["Albert", "Brenda", "Charles", "Dave", "Engelbert"]!
Goodbye ["Albert", "Brenda", "Charles", "Dave", "Engelbert"]. Come back soon.
...
ri20min.rb:15:in `say_hi': undefined method `elseif' for #<MegaGreeter:0x00000001a2d4a0 @names=nil> (NoMethodError)
from ri20min.rb:54:in `<main>'
I want to check whether a variable is nil.
if @names.nil?
But the error frustrated me! It seems that a nil object has not nil method! How can I amend this code to run correctly.
Upvotes: 0
Views: 39