2014-03-06 57 views
1

我試着去傳遞一個方法作爲參數傳遞給method_2,執行這一個,並返回結果:紅寶石通法作爲參數

def method_2(method_p, param) 
    res = method(method_p).call(param) 
    return res 
end 

def method_1 
    klass = MyKlass.instance 
    return method_2(klass.foo, "test") 
end 

這是MyKlass文件:

class MyKlass 
    def foo(param) 
    param+param 
    end 
end 

我的一切是一個錯誤

wrong number of arguments (0 for 1) 

回答

2

您可以使用符號引用方法:

def method_2(method_symbol, *args) 
    send method_symbol, *args 
end 

然而,由於你調用特定對象上的方法,你要麼必須通過在作爲一個額外的參數,或者使用PROC或λ,它是像包裹在對象的塊:

def method_2(proc, *args) 
    proc.call(*args) 
end 

method_2(->(param){ klass.foo(param) }, "test") 

這是更常見的是隻使用塊來做到這一點:

def method_2(receiver, *args, &block) 
    yield receiver, *args 
end 

method_2(klass, "test") do |receiver, param| 
    receiver.foo(param) 
end 

所有這些都是相當人爲的例子;你有沒有想要解決的具體問題?

0

當你:

return method_2(klass.foo, "test") 

klass.foo需要一個參數,這可能是導致錯誤的原因。