如何将语句作为参数传递?

时间:2011-12-02 17:02:17

标签: ruby

特别是在红宝石中,我想知道我是否能够做某事。

假设我有一个while循环,它会在不再满足条件之前执行某些操作。 我将需要同样的while循环用于多种目的,但条件每次都在变化。因此,我希望将其更改为可重用性的功能。

我可以通过(我正在检查的条件)作为参数吗?

类似的东西:

def wait(condition)
  while condition
    do something
  end
end

为了澄清,我想传递条件(或语句)本身,而不是在运行函数时对语句的评估。 另外我很确定我给的是错误的名字(陈述/条件/评价)所以如果我弄错了请纠正我。

2 个答案:

答案 0 :(得分: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/

答案 1 :(得分: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 }