Ruby 원 프로 그래 밍 의 주의 할 점

무한 순환 을 피 하 는 원 프로 그래 밍.
    함수 라 이브 러 리 를 쓸 때 핵심 클래스 를 혼 란 스 럽 게 하지 마 십시오.
    코드 블록 형식 은 문자열 삽입 형식 에 사용 하 는 것 이 가장 좋다.
        문자열 플러그 인 형식 을 사용 하면 항상 을 제공 합 니 다.FILE__ 와LINE__,당신 의 역 추적 을 의미 있 게 합 니 다.

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

        define_method 는 classeval{ def ... }
    사용 classeval(또는 다른 eval)과 문자열 삽입 값,주석 블록 을 추가 하여 삽입 할 때 표시 합 니 다(이것 은 제 가 rails 코드 에서 배 운 실천 입 니 다).

 # 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,거 슬러 올 라 가 는 것 을 귀 찮 게 합 니 다.이 습관 은\#methods 에 열거 되 지 않 습 니 다.맞 춤 법 이 잘못된 방법 도 묵묵히 일 할 수 있 습 니 다.예 를 들 어 nukes.launchstate = false。사용 의뢰,대리 또는 define 고려method,꼭 그래 야 한다 면 method 를 사용 하 세 요.missing ,
        확보 도 responsto_missing?
        글자 만 잡 고 좋 은 방법 을 정의 하 는 것 이 find 와 같 습 니 다.by_* D.코드 가 확실 할 수록 좋 습 니 다.
        문장의 마지막 호출 슈퍼
        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


좋은 웹페이지 즐겨찾기