我剛剛發現了我的ruby腳本的默認回調:at_exit - 這很酷。ruby腳本的默認回調是什麼?
我該如何找到像這樣的其他默認回調?我想如果我知道如何找到Ruby提供的所有默認回調函數,我可以編寫一些更靈活/強大的Ruby代碼。
我剛剛發現了我的ruby腳本的默認回調:at_exit - 這很酷。ruby腳本的默認回調是什麼?
我該如何找到像這樣的其他默認回調?我想如果我知道如何找到Ruby提供的所有默認回調函數,我可以編寫一些更靈活/強大的Ruby代碼。
編輯在JörgW Mittag的評論中添加了一些更正。
他們更廣泛地被稱爲掛鉤(也許來自emacs lisp的影響)。此外at_exit
,這是紅寶石掛鉤的名單,我認爲是全面的:
set_trace_func
initialize
method_missing
singleton_method_added
singleton_method_removed
singleton_method_undefined
respond_to_missing?
extended
included
method_added
method_removed
method_undefined
const_missing
inherited
intitialize_copy
intitialize_clone
intitialize_dup
prepend
append_features
extend_features
prepend_features
sawa是對的,我經常使用這些回調,根據我的情況,沒有任何失蹤。 –
我認爲還有'prepended'類似於'extended'和'included'。另外,還有'append_features','extend_features'和'prepend_features',它們被'include','extend'和'prepend'調用並執行實際工作(因此可以用來定製mixin的工作方式),類似的初始化'被'new'調用。 –
它們在哪裏(v.2.1):模塊 - > [append_features,const_missing,extended,included,method_added, method_removed,method_undefined,prepend_features,prepended];類 - > [繼承];對象 - > [respond_to_missing?]; BasicObject - > [method_missing,singleton_method_added,singleton_method_removed,singleton_method_undefined];內核 - > [at_exit,set_trace_func]。我不知道以下哪些方法(可以被任何類使用)記錄在哪裏 - > [initialize,intitialize_copy,intitialize_clone,intitialize_dup,extend_features]。 –
使用Ruby 2.0.0,TracePoint
類會幫助你在這方面,非常具體的方式。它會告訴你到底是什麼的掛鉤被稱爲任何特定的一段代碼:
例子:
trace = TracePoint.new(:c_call) do |tp|
p [tp.lineno, tp.event, tp.defined_class,tp.method_id]
end
trace.enable do
class Foo # line num 6
def bar # line num 7
12
end
def self.baz # line num 10
13
end
end
Foo.new.bar # line num 14
Foo.baz
end
# >> [6, :c_call, Class, :inherited]
# >> [7, :c_call, Module, :method_added]
# >> [10, :c_call, BasicObject, :singleton_method_added]
# >> [14, :c_call, Class, :new]
# >> [14, :c_call, BasicObject, :initialize]
看一看內核模塊,它定義了'at_exit'方法:HTTP:// www.ruby-doc.org/core-2.1.1/Kernel.html。如果有什麼像這種方法,它必須在那裏定義。 – BroiSatse