📄 03 - getting a reference to a method.rb
字号:
s = 'A string'length_method = s.method('length') # => #<Method: String#length>length_method.arity # => 0length_method.call # => 8#---1.succ # => 21.method(:succ).call # => 2#---5.method('+').call(10) # => 15[1,2,3].method(:each).call { |x| puts x }# 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 endendclass EventListener def hear(old_state, new_state) puts "Method triggered: state changed from #{old_state} " + "to #{new_state}." endendspawner = EventSpawner.newspawner.subscribe do |old_state, new_state| puts "Block triggered: state changed from #{old_state} to #{new_state}." endspawner.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.#---s = "sample string"replacements = { "a" => "i", "tring" => "ubstitution" }replacements.collect(&s.method("gsub"))# => ["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." endendWelcomer.method("an_instance_method") # NameError: undefined method `an_instance_method' for class `Class'Welcomer.new.method("an_instance_method").call # => "Salutations from a Welcomer object."Welcomer.method("a_class_method").call # => "Greetings from the Welcomer class."#---
⌨️ 快捷键说明
复制代码
Ctrl + C
搜索代码
Ctrl + F
全屏模式
F11
切换主题
Ctrl + Shift + D
显示快捷键
?
增大字号
Ctrl + =
减小字号
Ctrl + -