2014-10-22 6 views
7

Używam if yield self[x] do oceny, czy blok zwraca wartość true lub false. Muszę uczynić ten blok opcjonalnym i widzę sugestie dotyczące wykonania yield if block_given?. Jak mogę połączyć te dwie linie?Czy istnieje lepszy sposób na uzyskanie wartości z bloku w Ruby?

+1

Dlaczego nie pokazać nam, co próbujesz zrobić, zamiast go opisać? W ten sposób możemy naprawić twój kod, zamiast próbować wrzucić coś do gry? –

Odpowiedz

7

Czy próbowałeś tego?

if block_given? && yield(self[x]) 
    # ... 
end 

Ten warunek nie będzie zawsze, gdy blok nie jest podana, to znaczy to, co jest w miejscu # ... nie będą oceniane. Jeśli chcesz warunek do osiągnięcia sukcesu, jeśli nie blok jest podana, to zrobić w zamian:

if !block_given? || yield(self[x]) 
    # ... 
end 

albo to, choć myślę, że to trudniejsze do odczytania:

unless block_given? && !yield(self[x]) 
    # ... 
end 
3

Spróbuj:

if block_given? 
    if yield self[x] 
     # Do something.... 
    end 
end 
0

Możesz dodać warunek do całego bloku if:

if yield self[x] 
    # do something... 
end if block_given? 
Powiązane problemy