2009-03-11 3 views
4

접근 자 (Ruby와 같은 속성)가 종료되지 않으면 호출되는 Ruby 클래스에 추가 할 수있는 기본 메서드 또는 클래스 접근자가 있습니까? 그런 다음 액세스 코드를 쓰지 않고 접근 자처럼 값을 액세스 할 수있는 데이터베이스에서 읽은 배열 목록과 같은 응답을 사용자 정의 코드로 작성할 수 있습니다 (데이터베이스에서 읽지 않은 경우 알 수 없음). 기본 루비 접근 방법?

루비 MRI 1.9

를 사용

감사합니다!

답변

10

예, method_missing이라고합니다. 정의되지 않은 메서드가 사용될 때마다 호출됩니다. 접근자를 포함하여 원하는 모든 메서드를 추가하거나 에뮬레이트 할 수 있습니다. 당신이 Hash에이 던져

예를 들어, 속성으로 해시의 내용을 처리 할 수 ​​있습니다 :

h = {} 
def h.method_missing(*args) 
    if args.length == 1 
     self[args[0]] 
     elsif args.length == 2 and args[0].to_s =~ /^(.*)=$/ 
     self[$1.intern] = args[1] 
     else 
     super 
     end 
    end 

하자 당신은 쓰기 :

h.bob = "Robert" 

if h.bill == "William" ... 
h[:bob] = ... 스타일 이외에도

등이 있습니다.