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

何を達成したいのかわかりませんが、ある種のループが必要なようです。このようなものはあなたが必要とすることをしますか?

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

ruby-gotoを使用することもできますが、絶対に使用しないことをお勧めします。

goto ステートメントを使用しない理由の詳細については、この質問を参照してください。これは C# ベースですが、要点をうまくカバーしていると思います。

于 2013-01-08T23:46:51.713 に答える
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 に答える