Constrained genericity: Difference between revisions
→{{header|Ruby}}: Added Ruby
m (J: remove stale intro quip, simplify, and add some narrative description) |
(→{{header|Ruby}}: Added Ruby) |
||
Line 1,103:
All the tests pass. Look at the tests to see what generates an exception (i.e.
not allowed at runtime) and what does not.
=={{header|Ruby}}==
<lang ruby>class Foodbox
def initialize (*food)
raise ArgumentError, "food must be eadible" unless food.all?{|f| f.respond_to?(:eat)}
@box = food
end
end
class Fruit
def eat; end
end
class Apple < Fruit; end
p Foodbox.new(Fruit.new, Apple.new)
# => #<Foodbox:0x00000001420c88 @box=[#<Fruit:0x00000001420cd8>, #<Apple:0x00000001420cb0>]>
p Foodbox.new(Apple.new, "string can't eat")
# => test1.rb:3:in `initialize': food must be eadible (ArgumentError)
</lang>
=={{header|Sather}}==
|