2017-11-16 1 views
0

Class.new 메서드를 사용하여 동적 클래스를 만듭니다. 하지만 때로는 상속 된 클래스를 만들기 위해 매개 변수를 사용하여 메서드를 호출하는 경우가 있습니다.Class.new에 대한 선택적 매개 변수를 처리하는 방법

옵션 1 :

newclass = Class.new do 
    ... 
end 

옵션 2 : 새로운 클래스

newClass = Class.new(p) do 
    ... 
end 

본체는 동일하다. 하지만 정의되지 않은를 수신 할 수 없습니다. p. 그래서 if 문을 만들고 매개 변수를 사용하여 Class.new을 호출해야합니다. 즉, 코드를 변경할 때마다 이상이없는 클래스를 만들기 위해 중복 된 코드를 두 번 사용해야합니다. 어떻게하면이 문제를 해결할 수 있을까요?

+1

JFYI,이 질문은 레일과는 아무런 관련이 없습니다. 그냥 루비 야. –

+0

@SergioTulentsev OP의 이름 만 Railish로 들립니다. – sawa

+0

태그가있는 레일로 사용되었습니다 ... 태그가 이미 제거되었습니다 –

답변

1

Class.new 전화를 추상화하여 한 곳에서 차단할 수 있습니다. 다음과 같은 것 :

def create_me_a_class(superklass = Object, &block) 
    Class.new(superklass, &block) 
end 

newclass = create_me_a_class(p) do 
    def my_method 
    # whatever 
    end 
end 
+1

w/o params Class.new가'Object' 클래스에서 상속받은 클래스를 생성하므로'possible_superclass = Object'를 기본으로 설정하도록 제안합니다. 그래서, 우리는'if' 문을 제거 할 수 있습니다. – nattfodd

+0

@nattfodd : agree. 자신감 넘치는 코드입니다. :) 루비를 업그레이드 할 때 기본 수퍼 클래스 변경의 작은 기회가 있지만. 걱정할 가치가 있는지 확실하지 않습니다. –

+0

안녕하세요. possible_superclass = Object를 지정하면 작업을 수행합니다! Class.New를 부모 클래스와 함께 호출 할 수 있습니다. Object 또는 다른 클래스 중 하나가 작동합니다. 감사!!! –

관련 문제