检查变量和对象之间的相等性

时间:2014-11-25 07:05:44

标签: ruby

让我的程序正确检查外部完成(ext)和我之前创建的对象实例之间的相等性,我遇到了一些麻烦。是instance_of?问题在这里,因为我没有正确使用它?

##################################################
class Wood
end

class Brick
end

class Other
end
#################################################
asbestos =              Wood.new     #'Wood'
cement_board =          Wood.new     #'Wood'
frame_clapboard =       Wood.new     #'Wood'
vinyl =                 Wood.new     #'Wood'
asphalt =               Wood.new     #'Wood'
wood_shake =            Wood.new     #'Wood'

brick_stone =           Brick.new    #'Brick'
brick_stone_veneer =    Brick.new    #'Brick'
concrete =              Brick.new    #'Brick'

glass =                 Other.new    #Other Not Supported
other =                 Other.new    #Other Types Not Supported
stucco =                Other.new    #Not Suppored
aluminum =              Other.new    #Not supported
#################################################

puts "Enter name of Exterior Finish: "
ext = gets.chomp

puts"Enter year of building completion: "
year =  gets.chomp

if ext.instance_of? Wood

  puts "Tis Wood\n"

  if year.to_i.between?(1850, 1942)
    print "pre war wood\n"

  elsif year.to_i.between?(1943, 1977)
    print "post war wood\n"

  elsif year.to_i.between?(1978, 2005)
    print "near present wood\n"

  elsif year.to_i.between?(2006, 2014)
    print "present wood\n"
  end

elsif ext.instance_of? Brick

  puts "Tis Brick\n"

  if year.to_i.between?(1850, 1942)
    print "pre war brick\n"

  elsif year.to_i.between?(1943, 1977)
    print "post war brick\n"

  elsif year.to_i.between?(1978, 2005)
    print "near present brick\n"

  elsif year.to_i.between?(2006, 2014)
    print "present brick\n"
  end

else

  print "Of Type Not Supported\n"

end

1 个答案:

答案 0 :(得分:0)

class Wood
end

class Brick
end

class Other
end
#################################################
asbestos =              Wood.new     #'Wood'
cement_board =          Wood.new     #'Wood'
frame_clapboard =       Wood.new     #'Wood'
vinyl =                 Wood.new     #'Wood'
asphalt =               Wood.new     #'Wood'
wood_shake =            Wood.new     #'Wood'

brick_stone =           Brick.new    #'Brick'
brick_stone_veneer =    Brick.new    #'Brick'
concrete =              Brick.new    #'Brick'

glass =                 Other.new    #Other Not Supported
other =                 Other.new    #Other Types Not Supported
stucco =                Other.new    #Not Suppored
aluminum =              Other.new    #Not supported
#################################################

puts "Enter name of Exterior Finish: "
ext = gets.chomp
ext=eval (ext) rescue nil # this will convert entered text to corresponding class or instance or if user enter invalid text then it will set ext = nil

puts"Enter year of building completion: "
year =  gets.chomp

if ext.is_a? Wood

  puts "Tis Wood\n"

  if year.to_i.between?(1850, 1942)
    print "pre war wood\n"

  elsif year.to_i.between?(1943, 1977)
    print "post war wood\n"

  elsif year.to_i.between?(1978, 2005)
    print "near present wood\n"

  elsif year.to_i.between?(2006, 2014)
    print "present wood\n"
  end

 elsif ext.is_a? Brick

  puts "Tis Brick\n"

  if year.to_i.between?(1850, 1942)
    print "pre war brick\n"

  elsif year.to_i.between?(1943, 1977)
    print "post war brick\n"

  elsif year.to_i.between?(1978, 2005)
    print "near present brick\n"

  elsif year.to_i.between?(2006, 2014)
    print "present brick\n"
  end

else

  print "Of Type Not Supported\n"

end