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?
7
A
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?
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? –