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.
| Getting a Reference to a Method | ||
|---|---|---|
| Code | Expected | Actual |
s = 'A string'
length_method = s.method('length') |
#<Method: String#length> | #<Method: String#length> |
length_method.arity |
0 | 0 |
length_method.call |
8 | 8 |
1.succ |
2 | 2 |
1.method(:succ).call |
2 | 2 |
5.method('+').call(10) |
15 | 15 |
[1,2,3].method(:each).call { |x| puts x } |
1 2 3 |
1 2 3 |
class EventSpawner
def initialize
@listeners = []
@state = 0
end
def subscribe(&listener)
@listeners << listener
end
def change_state(new_state)
@listeners.each { |l| l.call(@state, new_state) }
@state = new_state
end
end
class EventListener
def hear(old_state, new_state)
puts "Method triggered: state changed from #{old_state} " +
"to #{new_state}."
end
end
spawner = EventSpawner.new
spawner.subscribe do |old_state, new_state|
puts "Block triggered: state changed from #{old_state} to #{new_state}."
end
spawner.subscribe &EventListener.new.method(:hear)
spawner.change_state(4) |
Block triggered: state changed from 0 to 4. Method triggered: state changed from 0 to 4. |
Block triggered: state changed from 0 to 4. Method triggered: state changed from 0 to 4. |
s = "sample string"
replacements = { "a" => "i", "tring" => "ubstitution" }
replacements.collect(&s.method("gsub")) |
["simple string", "sample substitution"] | ["simple string", "sample substitution"] |
class Welcomer
def Welcomer.a_class_method
return "Greetings from the Welcomer class."
end
def an_instance_method
return "Salutations from a Welcomer object."
end
end
Welcomer.method("an_instance_method") |
NameError: undefined method `an_instance_method' for class `Class' ... |
NameError: undefined method `an_instance_method' for class `Class' from (irb):45:in `method' from (irb):45 |
Welcomer.new.method("an_instance_method").call |
"Salutations from a Welcomer object." | "Salutations from a Welcomer object." |
Welcomer.method("a_class_method").call |
"Greetings from the Welcomer class." | "Greetings from the Welcomer class." |