2014-11-26 18 views
9

Próbuję utworzyć nieskończoną pętlę, w której blok kodu zostanie wykonany na zawsze.Tworzenie pętli nieskończonej

Cała dokumentacja pętli, którą znalazłem, ostrzega przed tworzeniem nieskończonej pętli, ale bez przykładów działania.

Jeśli mam fragment kodu:

{ puts "foo" 
    puts "bar" 
    sleep 300 } 

Jak bym go o uruchomienie tego bloku na zawsze?

+5

otagowaniu to 'Ruby-on-rails'. Jeśli próbujesz utworzyć nieskończoną pętlę w Railsach, prawdopodobnie robisz coś okropnie nie tak. Nie można tego zrobić w tym samym procesie, który obsługuje twoją witrynę, lub pojedynczy wątek wykonania nie może faktycznie odpowiadać na przychodzące żądania. Jeśli chcesz coś zrobić co 300 sekund, potrzebujesz asynchronicznego zadania w tle. Powinieneś opisać swój rzeczywisty problem, abyśmy mogli udzielić ci prawdziwej porady - używanie nieskończonej pętli to * rozwiązanie *, a nie * problem *. – meagar

+0

Dziękuję za wyjaśnienie. Ta pętla nie jest używana do szyn. Usunąłem tag. Dziękuję za wyjaśnienie! –

Odpowiedz

15
loop do 
    puts 'foo' 
    puts 'bar' 
    sleep 300 
end 
+0

Wznowienie dla poprawnej odpowiedzi, ale najlepszą odpowiedzią jest prawdopodobnie nadal komentarz @ meagar. :) – Amadan

-2

1) Podczas gdy pętla:

While 1==1 # As the condition 1 is equal to 1 is true, it always runs. 
    puts "foo" 
    puts "bar" 
    sleep 300 
    end 

2) Recursion:

def infiniteLoop # Using recursion concept 
     puts "foo" 
     puts "bar" 
     sleep 300 
     infiniteLoop #Calling this method again  
    end 

EDIT: Myślałem, że to będzie działać, ale jak wspomniano Gabriel, chcielibyśmy dostać SystemStackError.

3) pętli

loop do 
    puts "foo" 
    .... 
    end 

4) Stosując chyba

unless 1 == 2 # Unless 1 is equal to 2 , it keeps running 
puts "foo" 
... 
end 
+3

'unless' nie jest konstrukcją pętli, jest synonimem' if not'. Być może myślałeś o 'until', synonim' while while not'.I choć jesteśmy na 'while', Ruby jest wielkość liter:' While' jest niezdefiniowana stała, a nie słowa kluczowe jak 'while' jest; i jako słowo kluczowe, nie akceptuje blok, więc 'podczas ... do' jest błąd składni, jak również. – Amadan

+1

rekursji alternatywa nie będzie działać jak w każdej iteracji jesteś dodanie poziomu do stosu i ostatecznie [ '] (http://www.ruby-doc.org/core-2.1.5/SystemStackError.html SystemStackError') zostaną podniesione. –

+0

Dziękujemy wam, o korektach. –

9

Oto przykłady nieskończonej pętli z klocków.

pętli

loop do 
    puts "foo" 
    puts "bar" 
    sleep 300 
end 

Podczas

while true 
    puts "foo" 
    puts "bar" 
    sleep 300 
end 

Do

until false 
    puts "foo" 
    puts "bar" 
    sleep 300 
end 

N

-> { puts "foo" ; puts "bar" ; sleep 300}.call until false 

Istnieje również kilka odmian lambda, wykorzystujących nieruchliwą składnię lambda. Również moglibyśmy użyć Proc.

Begin..End

begin 
    puts "foo" 
    puts "bar" 
    sleep 300 
end while false 
Powiązane problemy