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.
| Checking Class or Module Membership | ||
|---|---|---|
| Code | Expected | Actual |
def send_as_package(obj)
if obj.respond_to? :package
packaged = obj.package
else
if $DEBUG
$stderr.puts "Not sure how to package a #{obj.class}."
$stderr.puts 'Trying generic packager.'
end
package = Package.new(obj)
end
send(package)
end
def multiply_precisely(a, b)
if a.is_a? Float or b.is_a? Float
raise ArgumentError, "I can't do precise multiplication with floats."
end
a * b
end
multiply_precisely(4, 5) |
20 | 20 |
multiply_precisely(4.0, 5) |
ArgumentError: I can't do precise multiplication with floats. ... |
ArgumentError: I can't do precise multiplication with floats. from (irb):15:in `multiply_precisely' from (irb):20 |
def append_to_self(x)
unless x.respond_to? :<<
raise ArgumentError, "This object doesn't support the left-shift operator."
end
if x.is_a? Numeric
raise ArgumentError,
"The left-shift operator for this object doesn't do an append."
end
x << x
end
append_to_self('abc') |
"abcabc" | "abcabc" |
append_to_self([1, 2, 3]) |
[1, 2, 3, [...]] | [1, 2, 3, [...]] |
append_to_self({1 => 2}) |
ArgumentError: This object doesn't support the left-shift operator. ... |
ArgumentError: This object doesn't support the left-shift operator. from (irb):23:in `append_to_self' from (irb):33 |
append_to_self(5) |
ArgumentError: The left-shift operator for this object doesn't do an append. ... |
ArgumentError: The left-shift operator for this object doesn't do an append. from (irb):26:in `append_to_self' from (irb):34 |
5 << 5 |
160 | 160 |
module ShiftMeansAppend
def <<(x)
end
end
class String
include ShiftMeansAppend
end
class Array
include ShiftMeansAppend
end
def append_to_self(x)
unless x.is_a? ShiftMeansAppend
raise ArgumentError, "I can't trust this object's left-shift operator."
end
x << x
end
append_to_self 4 |
ArgumentError: I can't trust this object's left-shift operator. ... |
ArgumentError: I can't trust this object's left-shift operator. from (irb):48:in `append_to_self' from (irb):52 |
append_to_self '4' |
"44" | "44" |