2014-10-22 22 views
7

Bir bloğun doğru veya yanlış olup olmadığını değerlendirmek için if yield self[x] kullanıyorum. Bloğu isteğe bağlı yapmam gerekiyor ve önerileri yield if block_given? yapmam gerekiyor. Bu iki satırı nasıl birleştirebilirim?Ruby'deki bir bloktan değer elde etmek için daha iyi bir yol var mı?

+1

Neden anlatmak yerine, yapmaya çalıştığınız şeyi bize göstermiyorsunuz? Bu şekilde, bir şeyleri çekmeye çalışmak yerine kodunuzu düzeltebiliriz? –

cevap

7

Bunu denediniz mi? Hiçbir blok verildiğinde

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

Bu durum her zaman, yani değerlendirmeye alınmayacaktır # ... yerine ne olursa olsun başarısız olur. Eğer durum hiçbir blok verilirse başarılı olmak istiyorsanız, bunun yerine bunu:

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

Ya da bu, ben okumak zor olduğunu düşünüyorum rağmen:

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

Dene:

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

Tüm koşulu, if tüm bloğuna ekleyebilirsiniz:

if yield self[x] 
    # do something... 
end if block_given? 
İlgili konular