2013-06-05 36 views
0

如何通過一系列代碼塊傳遞索引?紅寶石,在遞歸代碼塊中傳遞/返回計數器

# i'm not sure how to set this up 
def call(index=0, &block) # index here is likely not needed 
    yield (index+1) # or block.call(index) 
end 

call{call{call{}}} 

應該給在每次呼叫 的總計數(3),把計數優選,而不必顯式地使用呼叫{| I |致電{| i | }}

+0

你能解釋爲什麼你想這樣做嗎?您的示例中不明顯。 DSL? –

回答

2

試試這個變種:

def call(index = 0) 
    if block_given? and (res = yield(index + 1)) != nil 
    res + 1 
    else 
    index + 1 
    end 
end 
+1

+1。不過,所有'index'參數部分都可以被刪除。 'def call; (block_given?&& res = yield)? res + 1:1;結束' –

+0

謝謝!我仍然試圖理解這一點。如果我想執行一個動作/調用方法或者返回字符串的連接,那麼通過這種方式怎麼可能? – user1297102

+1

當然,關鍵時刻 - 'res + 1',所以如果你想連接字符串,你可以做'res +'bar'。 –