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

首頁(yè) > 學(xué)院 > 開發(fā)設(shè)計(jì) > 正文

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

2019-10-26 19:28:10
字體:
供稿:網(wǎng)友

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

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

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

 class_eval 'def use_relative_model_naming?; true; end', __FILE__, __LINE__

        define_method 最好用 class_eval{ def ... }

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

 # 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,它使得回溯變得很麻煩,這個(gè)習(xí)慣不被列在 #methods,拼寫錯(cuò)誤的方法可能也在默默的工作,例如 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


發(fā)表評(píng)論 共有條評(píng)論
用戶名: 密碼:
驗(yàn)證碼: 匿名發(fā)表
主站蜘蛛池模板: 海淀区| 高淳县| 常山县| 马边| 湛江市| 禹城市| 鲁山县| 广平县| 平邑县| 新营市| 浏阳市| 岚皋县| 嵩明县| 镶黄旗| 乌拉特后旗| 遵义县| 汉阴县| 西乡县| 曲周县| 民乐县| 盐源县| 金山区| 措美县| 东乌珠穆沁旗| 仲巴县| 杭锦后旗| 武陟县| 泰顺县| 静乐县| 怀集县| 乌拉特前旗| 乐都县| 磐石市| 东丽区| 达日县| 灌云县| 石屏县| 广州市| 通江县| 南召县| 邻水|