fork download
  1. #!/usr/bin/env ruby
  2.  
  3. class Door
  4. HINGED_DOOR_WITH_KNOB = 0
  5. HINGED_DOOR_WITHOUT_KNOB = 1
  6. SLIDING_DOOR = 2
  7.  
  8. OPENED = 0
  9. CLOSED = 1
  10. BROKEN = 2
  11.  
  12. def initialize(type = HINGED_DOOR_WITH_KNOB)
  13. @doorType = type
  14. @doorStatus = CLOSED
  15. end
  16.  
  17. def setType(type)
  18. @doorType = type
  19. end
  20.  
  21. def open
  22. @doorStatus = OPENED if @doorType == HINGED_DOOR_WITHOUT_KNOB
  23. end
  24.  
  25. def close
  26. @doorStatus = CLOSED
  27. end
  28.  
  29. def getType
  30. @doorType
  31. end
  32.  
  33. def getStatus
  34. @doorStatus
  35. end
  36. end
  37.  
  38. class Cat
  39. MALE = 0
  40. FEMALE = 1
  41.  
  42. WHITE = 0
  43. BLACK = 1
  44.  
  45. def initialize(name = "ぬこ", weight = 4.5, sex = MALE, color = WHITE)
  46. @name = name
  47. @weight = weight
  48. @sex = sex
  49. @color = color
  50. end
  51.  
  52. def setName(name)
  53. @name = name
  54. end
  55. def setWeight(weight)
  56. @weight = weight
  57. end
  58.  
  59. def setColor(color)
  60. @color = color
  61. end
  62.  
  63. def setSex(sex)
  64. @sex = sex
  65. end
  66.  
  67. def openDoor(door)
  68. def door.open
  69. raise "よくぞ我を開けようと試みたな……死をくれてやる……!"
  70. end
  71.  
  72. begin
  73. door.open
  74. rescue => e
  75. raise e.exception "#{e.message} とかいわれたのでねるにゃー(棒)"
  76. end
  77. end
  78.  
  79. def canOpenDoor(door)
  80. door.instance_variable_set(:@doorType, Door::HINGED_DOOR_WITHOUT_KNOB)
  81. door.getType == Door::HINGED_DOOR_WITHOUT_KNOB
  82. end
  83.  
  84. private
  85. def method_missing(name, args)
  86. if name == :setSex
  87. puts "性転換なんてごめんにゃー! ほうふくてろにゃー!"
  88. return
  89. end
  90. end
  91. end
  92.  
  93. door = Door.new
  94. cat = Cat.new("ぬこ", 10.0, Cat::MALE, Cat::WHITE)
  95. Cat.class_eval { remove_method :setSex }
  96.  
  97. cat.setSex(Cat::FEMALE)
  98. cat.openDoor(door) if cat.canOpenDoor(door)
  99.  
Runtime error #stdin #stdout #stderr 0.01s 28216KB
stdin
Standard input is empty
stdout
性転換なんてごめんにゃー! ほうふくてろにゃー!
stderr
prog.rb:82:in `rescue in openDoor': よくぞ我を開けようと試みたな……死をくれてやる……! とかいわれたのでねるにゃー(棒) (RuntimeError)
	from prog.rb:79:in `openDoor'
	from prog.rb:97:in `<main>'