2011-12-02 64 views
3

具體在紅寶石,我想知道如果我能夠做些事情。我如何將一個陳述作爲參數傳遞?

比方說,我有一個while循環,直到一個條件不再滿足爲止。 我將需要同時循環用於多種用途,但每次都會改變條件。因此,我想將其改爲可重用功能的功能。

是否有可能讓我通過(我檢查什麼條件)作爲參數?

喜歡的東西:

def wait(condition) 
    while condition 
    do something 
    end 
end 

爲了澄清,我想通過條件(或語句)本身,而不是語句的評價在運行函數的時間。 另外,我很確定我給這些錯誤的名稱(聲明/條件/評估),所以如果我錯了,請糾正我。

回答

4

你可以做到這一點與塊:

def wait(&condition) 
    while condition.call() 
     # do something 
    end 
end 

... 

wait {true} # never returns 

一些有用的信息,請參閱http://www.robertsosinski.com/2008/12/21/understanding-ruby-blocks-procs-and-lambdas/

+0

哇非常快的回覆,謝謝MiniTech移動! – kennyg

+0

然而,當我運行wait({true})時,它給了我一個錯誤: irb(main):063:0> wait({true}) SyntaxError:編譯錯誤 (irb):63: (irb):63 from:0 irb(main):064:0> – kennyg

+0

...抱歉,此處不能用。如何在評論中輸入換行符? – kennyg

2
def print_while(value, &condition) 
    while condition.call 
    print value 
    end 
end 

或:

def wait(value) 
    while yield 
    print value 
    end 
end 

要撥打:

wait(2) { true } 
+0

'def等待(價值)打印價值,而產量結束'應該做的一樣,看起來更清潔國際海事組織。 –