2014-10-22 37 views
7

Ich habe if yield self[x] verwendet, um auszuwerten, ob ein Block wahr oder falsch zurückgibt. Ich muss den Block optional machen, und ich sehe Vorschläge zu tun yield if block_given?. Wie kann ich diese beiden Linien kombinieren?Gibt es einen besseren Weg, um einen Wert von einem Block in Ruby zu erhalten?

+1

Warum zeigen Sie uns nicht, was Sie vorhaben, anstatt es zu beschreiben? Auf diese Weise können wir Ihren Code reparieren, anstatt dass Sie etwas schuhen wollen? –

Antwort

7

Haben Sie das versucht?

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

Dieser Zustand wird immer fehlschlagen, wenn kein Block gegeben ist, das heißt, was anstelle von # ... ist, wird nicht bewertet. Wenn Sie die Bedingung erfolgreich sein wollen, wenn kein Block gegeben ist, dies zu tun, statt:

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

Oder diese, obwohl ich denke, es ist schwieriger zu lesen:

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

Versuchen:

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

Sie können eine Bedingung an den gesamten if Block anhängen:

if yield self[x] 
    # do something... 
end if block_given? 
Verwandte Themen