2014-10-22 10 views
7

Ho utilizzato if yield self[x] per valutare se un blocco restituisce vero o falso. Ho bisogno di rendere il blocco opzionale, e vedo suggerimenti per fare yield if block_given?. Come posso combinare queste due linee?C'è un modo migliore per ottenere un valore da un blocco in Ruby?

+1

Perché non mostrarci cosa stai cercando di fare, piuttosto che descriverlo? In questo modo possiamo sistemare il tuo codice piuttosto che provare a inserire qualcosa? –

risposta

7

Hai provato questo?

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

Questa condizione sempre sicuro quando non viene dato blocco, ossia tutto ciò che è in luogo di # ... non saranno valutate. Se si desidera che la condizione di successo se nessun blocco è dato, fare questo, invece:

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

O questo, anche se penso che sia più difficile da leggere:

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

Prova:

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

È possibile aggiungere una condizione all'intero blocco if:

if yield self[x] 
    # do something... 
end if block_given? 
Problemi correlati