2013-12-21 35 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

相關問題