示例(导轨):
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
是否有一种方法可以重新启动方法/动作,使其从顶部开始?
示例(导轨):
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
是否有一种方法可以重新启动方法/动作,使其从顶部开始?
你可以使用ruby-goto,但我绝对不推荐它。
有关为什么不使用 goto 语句的更多信息,请查看此问题。它是基于 C# 的,但我认为它很好地涵盖了这一点。
不确定你想要完成什么,但听起来你需要某种循环。这样的事情会做你需要的吗?
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]
.
试试关键字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
也将重复当前迭代。