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
이 내용에 흥미가 있습니까?
현재 기사가 여러분의 문제를 해결하지 못하는 경우 AI 엔진은 머신러닝 분석(스마트 모델이 방금 만들어져 부정확한 경우가 있을 수 있음)을 통해 가장 유사한 기사를 추천합니다:
Ruby의 단일 메소드 및 단일 클래스 상세 정보단일 방법 Ruby는 단일 객체에만 적용되는 단일 객체 추가 방법을 단일 방법이라고 합니다. 또한 위에서 사용한 정의 방법 외에 Object#define_를 통해singleton_method 방법으로 단일 방법 정의...
텍스트를 자유롭게 공유하거나 복사할 수 있습니다.하지만 이 문서의 URL은 참조 URL로 남겨 두십시오.
CC BY-SA 2.5, CC BY-SA 3.0 및 CC BY-SA 4.0에 따라 라이센스가 부여됩니다.