校园春色亚洲色图_亚洲视频分类_中文字幕精品一区二区精品_麻豆一区区三区四区产品精品蜜桃

主頁 > 知識庫 > 實例講解Ruby中的鉤子方法及對方法調用添加鉤子

實例講解Ruby中的鉤子方法及對方法調用添加鉤子

熱門標簽:浦東上海400開頭的電話申請 買了外呼系統不想用了怎么辦 武漢呼叫中心外呼系統線路商 北京語音電銷機器人價格 樂昌電話機器人 開封百應電銷機器人聯系方式 邯鄲外呼調研線路 電話機器人電話卡封號怎么辦 真人語音電銷機器人系統

鉤子方法有些類似事件驅動裝置,可以在特定的事件發生后執行特定的回調函數,這個回調函數就是鉤子方法(更形象的描述: 鉤子方法可以像鉤子一樣,勾住一個特定的事件。),在Rails中before\after函數就是最常見的鉤子方法。

Class#inherited方法也是這樣一個鉤子方法,當一個類被繼承時,Ruby會調用該方法。默認情況下,Class#inherited什么都不做,但是通過繼承,我們可以攔截該事件,對感興趣的繼承事件作出回應。

class String
  def self.inherited(subclass)
    puts “#{self} was inherited by #{subclass}”
  end
end
class MyString  String; end
輸出:
String was inherited by MyString

通過使用鉤子方法,可以讓我們在Ruby的類或模塊的生命周期中進行干預,可以極大的提高編程的靈活性。

對方法調用添加鉤子的實例
ruby有很多有用的鉤子,如included,inhered,以及method_missing。對方法調用添加鉤子可以用alias環繞別名實現,但終歸有些麻煩,alias_method_chain需要定義with_feature方法也較麻煩,因此實現了下列module,include后調用method_callback :before_method,:after_method即可為before_method添加after_method鉤子

module AfterCall
 def self.included(base)
  base.extend(ClassMethods)
 end
 module ClassMethods
  def after_call when_call,then_call,*args_then,block_then
   alias_method "old_#{when_call}",when_call
   define_method when_call do |*args_when,block_when|
    send "old_#{when_call}",*args_when,block_when
    send then_call,*args_then,block_then
   end
  end
 end
end
class Student
 include AfterCall
 def enter_class sb
  puts "enter class #{sb}"
  yield('before') if block_given?
 end
 private
 def after_enter_class pop
  puts "after enter class #{pop}"
  yield('after') if block_given?
 end
 protected
 def third_after
  puts "from third enter"
 end

 after_call :after_enter_class ,:third_after
 after_call :enter_class ,:after_enter_class,"doubi", lambda {|x|puts "from lambda #{x}"}
end
Student.new.enter_class "1" do |x|
 puts "from lambda #{x}"
end

運行結果如下:

#enter class 1
#from lambda before
#after enter class doubi
#from lambda after
#from third enter

您可能感興趣的文章:
  • Ruby中的鉤子方法詳解
  • Ruby中鉤子方法的運用實例解析

標簽:宜春 淄博 鄂州 河北 六安 石嘴山 自貢 松原

巨人網絡通訊聲明:本文標題《實例講解Ruby中的鉤子方法及對方法調用添加鉤子》,本文關鍵詞  實例,講解,Ruby,中的,鉤子,;如發現本文內容存在版權問題,煩請提供相關信息告之我們,我們將及時溝通與處理。本站內容系統采集于網絡,涉及言論、版權與本站無關。
  • 相關文章
  • 下面列出與本文章《實例講解Ruby中的鉤子方法及對方法調用添加鉤子》相關的同類信息!
  • 本頁收集關于實例講解Ruby中的鉤子方法及對方法調用添加鉤子的相關信息資訊供網民參考!
  • 推薦文章
    主站蜘蛛池模板: 繁峙县| 浮山县| 哈巴河县| 资源县| 大余县| 杭锦后旗| 油尖旺区| 江源县| 丰顺县| 普兰县| 黑山县| 潢川县| 长沙市| 马山县| 阳朔县| 吉林省| 进贤县| 萝北县| 黑水县| 邯郸市| 威远县| 黑河市| 荣成市| 亚东县| 确山县| 正蓝旗| 漯河市| 汽车| 云林县| 仙游县| 商河县| 石河子市| 彩票| 赤峰市| 藁城市| 柞水县| 沂源县| 鲜城| 信丰县| 新竹县| 德州市|