2012-10-07 22 views
17

Chcę zapisać „blok kodu” w zmiennej do ponownego wykorzystania, coś jak:Jak przechowywać kodu Ruby bloki

block = do 
|test| puts test 
end 

3.upto(8) block 

Czy ktoś może mi pokazać, co robię, więc oczywiście nie tak? (Lub jeśli to tylko możliwe)

Odpowiedz

24

Istnieje wiele sposobów, aby to zrobić w Ruby, z których jedna jest użycie Proc:

foo=Proc.new do |test| 
    puts test 
end 

3.upto(8) { foo.call("hello world") } 

Więcej o Procs:

Update, powyższy sposób może być zapisane w następujący sposób:

# using lower-case **proc** syntax, all on one line 
foo = proc { |test| puts test } 
3.upto(8) { foo.call("hello world") } 

# using lambda, just switch the method name from proc to lambda 
bar = lambda { |test| puts test } 
3.upto(8) { bar.call("hello world") } 

Są to zasadniczo bardzo podobne metody, z subtelnymi różnicami.

I na koniec, istnieją prawdopodobnie bardziej eleganckie sposoby robienia tego, co opisałem, dobrze jest usłyszeć od każdego, kto ma lepszy sposób. Mam nadzieję że to pomoże.

+2

Wielkie dzięki. Dla łącza jeszcze więcej. Czy możesz być tak uprzejmy, aby dodać wzmiankę o lambdas? Do celów historycznych. –

+0

@Shingetsu, dodałem i zaktualizowałem z lambda, a także nieco uproszczoną wersję podejścia proc też – stephenmurdoch

+3

@Shingetsu: Lambdas nie są historyczne. Powinieneś prawie * zawsze * używać ich zamiast Proc. Są dużo bardziej w pełni funkcjonalne i są standardem. – Linuxios