2013-12-21 2 views
1

컴파일 된 C++ 라이브러리에서 루비 모듈을 성공적으로 생성했지만 일부 루비 메소드를 추가하려고합니다. 예를 들어, 라이브러리 중 하나는 당신이를 통해 액세스 개체의 연결리스트 반환swig 생성 루비 모듈에 기능을 추가하는 가장 좋은 방법은 무엇입니까?

objects.get_first_object 
objects.get_next_object 

내가

objects.each do |object| 
    ... 
end 

을 할 수 있도록하는 방법을 추가하고 싶습니다 그렇게

def to_a 
    ret = Array.new 
    obj = objects.get_first_object 
    while obj 
    ret << obj 
    obj = objects.get_next_object 
    end 
    return ret 
end 
같은 아마 뭔가

질문은 방법을 만드는 방법이 아니라 클래스에 어떻게 추가해야합니까?

방금 ​​클래스를 열고 메소드를 추가해야합니까?
하위 클래스를 만들려고 생각했지만 상속 관계가 포함되어 있기 때문에 지저분 해 보였습니다. 그렇게 할 경우 상속을 다시 만들어야 할 것이라고 생각합니까?

수업을 시작하기로 결정했다면 수업에 가장 좋은 방법은 무엇입니까?

+1

* 클래스를 열고 메소드를 추가해야합니까? * 가능합니다. –

+1

[루비에서 클래스를 원숭이에게 패치하기위한 권장 접근법] (http://stackoverflow.com/questions/10337712/recommended-approach-to-monkey-patching-a-class-in-ruby) 이상 [루비 원숭이 패치 수업] (https://www.google.co.in/search?client=ubuntu&channel=fs&q=ruby+monkey+patch+class&ie=utf-8&oe=utf-8&gws_rd=cr&ei=ZR61UpSkOMePrQeAo4HQDw) –

답변

2

그냥 클래스를 열고 방법 추가 애호가 아무것도 할 이유가

class SwigGeneratedClass 
    def to_a 
    ret = Array.new 
    obj = objects.get_first_object 
    while obj 
     ret << obj 
     obj = objects.get_next_object 
    end 
    return ret 
    end 
end 

없습니다입니다.

+0

나는 SwigGeneratedClass와 함께 가기로 결심했다. .class_eval do ... 약간의 경우가있는 것 같습니다. 그 방법이 약간 더 좋았지 만, 위의 경우에도 괜찮습니다. – nPn

+0

@nPn : class_eval을 사용하는 것은 idomatic이 아닙니다. – Linuxios

관련 문제