国产探花免费观看_亚洲丰满少妇自慰呻吟_97日韩有码在线_资源在线日韩欧美_一区二区精品毛片,辰东完美世界有声小说,欢乐颂第一季,yy玄幻小说排行榜完本

首頁 > 編程 > Ruby > 正文

Ruby元編程的一些值得注意的地方

2020-02-24 15:36:45
字體:
供稿:網(wǎng)友

Ruby的類更像是一個運算符,而不是類定義語句,它可以創(chuàng)建一個不存在的類,或者打開一個定義的類,然后向內(nèi)部添加新的方法和屬性,下文是武林技術(shù)頻道小編介紹的Ruby元編程的一些值得注意的地方。

避免無限循環(huán)的元編程。

??? 寫一個函數(shù)庫時不要使核心類混亂(不要使用 monkey patch)。

??? 代碼塊形式最好用于字符串插值形式。
??????? 當你使用字符串插值形式,總是提供 __FILE__ 和 __LINE__,使得你的回溯有意義。

ruby.html="" tags="">ruby;"> class_eval 'def use_relative_model_naming?; true; end', __FILE__, __LINE__

??????? define_method 最好用 class_eval{ def ... }

??? 當使用 class_eval (或者其他的 eval)以及字符串插值,添加一個注釋塊使之在插入的時候顯示(這是我從 rails 代碼學(xué)來的實踐):

 # from activesupport/lib/active_support/core_ext/string/output_safety.rb UNSAFE_STRING_METHODS.each do |unsafe_method|  if 'String'.respond_to?(unsafe_method)  class_eval <<-EOT, __FILE__, __LINE__ + 1   def #{unsafe_method}(*args, &block)  # def capitalize(*args, &block)   to_str.#{unsafe_method}(*args, &block) # to_str.capitalize(*args, &block)   end          # end   def #{unsafe_method}!(*args)    # def capitalize!(*args)   @dirty = true       # @dirty = true   super         # super   end          # end  EOT  end end

??? 避免在元編程中使用 method_missing,它使得回溯變得很麻煩,這個習(xí)慣不被列在 #methods,拼寫錯誤的方法可能也在默默的工作,例如 nukes.launch_state = false。考慮使用委托,代理或者是 define_method ,如果必須這樣,使用 method_missing ,
??????? 確保 也定義了 respond_to_missing?
??????? 僅捕捉字首定義良好的方法,像是 find_by_* ― 讓你的代碼越肯定(assertive)越好。
??????? 在語句的最后調(diào)用 super
??????? delegate 到確定的、非魔法方法中:

 # bad def method_missing?(meth, *args, &block)  if /^find_by_(?<prop>.*)/ =~ meth  # ... lots of code to do a find_by  else  super  end end # good def method_missing?(meth, *args, &block)  if /^find_by_(?<prop>.*)/ =~ meth  find_by(prop, *args, &block)  else  super  end end # best of all, though, would to define_method as each findable attribute is declared

好啦,今天關(guān)于Ruby元編程的一些值得注意的地方就給大家分享都這里,希望大家可以繼續(xù)支持武林技術(shù)頻道,如果想要了解更多知識,可以關(guān)注我們哦!

發(fā)表評論 共有條評論
用戶名: 密碼:
驗證碼: 匿名發(fā)表

圖片精選

主站蜘蛛池模板: 新营市| 芦溪县| 称多县| 卓资县| 卫辉市| 岳池县| 肇庆市| 阿巴嘎旗| 勃利县| 九龙城区| 衡东县| 宽甸| 星子县| 堆龙德庆县| 始兴县| 阿勒泰市| 平罗县| 武乡县| 台安县| 明溪县| 黄山市| 江津市| 禄丰县| 灵台县| 武安市| 诸城市| 梧州市| 双流县| 将乐县| 车险| 涞水县| 裕民县| 兴城市| 大足县| 田林县| 三江| 公主岭市| 西宁市| 大姚县| 灵宝市| 敦化市|