2013-12-21 36 views
1

我已经从编译的C++库成功生成了一个ruby模块,但是我想添加一些ruby方法。例如,图书馆之一返回您通过访问对象的链接列表:向swig生成的ruby模块添加功能的最佳方式是什么?

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:只要注意,它不是idomatic使用class_eval。 – Linuxios

相关问题