1

示例(导轨):

def blabla

    @ads = ["1", "2"] if @ads.nil?
    @reklame = Reklamer.find(@koder.sample)
    @ads[0] = @reklame.id
    if @ads[0] == @ads[1]
    begin from start method from start
    end

end

是否有一种方法可以重新启动方法/动作,使其从顶部开始?

4

3 回答 3

1

你可以使用ruby​​-goto,但我绝对不推荐它。

有关为什么使用 goto 语句的更多信息,请查看此问题。它是基于 C# 的,但我认为它很好地涵盖了这一点。

于 2013-01-08T23:46:51.713 回答
1

不确定你想要完成什么,但听起来你需要某种循环。这样的事情会做你需要的吗?

def blabla
   @ads ||= ["1", "1"]
   # careful with comparing a string ("2") to a numeric id
   while @ads[0] == @ads[1] do
     @reklame = Reklamer.find(@koder.sample)
     @ads[0] = @reklame.id 
   end
end

基本上你会一直重置@ads[0],直到它不同于@ads[1].

于 2013-01-09T00:03:42.173 回答
1

试试关键字retry,这个关键字会从头开始迭代,所以考虑重建你的方法来使用迭代,例如:

def blabla
  @ads = ["1", "2"] if @ads.nil?
  @ads.each_slice do |prev_,next_|
    @reklame = Reklamer.find(@koder.sample)
    prev_ = @reklame.id
    retry if prev_ == next_
  end
end

关键字redo也将重复当前迭代。

于 2013-01-09T00:27:33.497 回答