Ich rufe eine Methode mit einem Block;Ruby überprüfen, ob Block 0 ist
method do
"Hello"
end
und die Methode ist definiert als;
def method
yield
end
und bei der Definition Verfahren; Ich möchte überprüfen, ob der angegebene Block leer ist (nil) oder nicht, weil die Variable in der Methode so enden kann;
method do
""
end
So in Definition, ich möchte überprüfen, ob die Ausbeute Block gleich Null ist oder nicht. Mögen;
def method
if yield ? yield : "Empty block? Seriously?"
end
Ich weiß, dass das obige nicht funktioniert. Bu, das will ich erreichen.
Denken Sie auch daran, dass block_given? wird immer "wahr" sein, da der Block auch dann gegeben ist, wenn er oder leere Zeichenfolge ist.
UPDATE: Wie die meisten Kommentare/Antworten sagen, dass die Frage unklar ist; hier ist das Problem durch @ndn vereinfacht:
ich, wenn das Ergebnis überprüfen möchten einen Block ausführen „leer“ ist (null oder „“) ohne es zuerst aufgerufen wird.
Wenn ich Sie richtig verstehe, möchten Sie wissen, ob der vom Block zurückgegebene Wert "Nil" oder "" ist, bevor er nachgibt. Das ist nicht möglich. Wenn das nicht der Fall ist, können Sie einfach das Ergebnis von "yield" einer Variablen zuweisen und "nil?" Und "empty?" Prüfen. – ndn
Ja, Sie haben Recht. –
Ja, wenn ich es wie in @ WandMaker's Antwort zuweisen, gibt es einen Fehler wenn Block nicht gegeben ist. Sie sagen also, es gibt keine Möglichkeit zu lernen, ob der Blockinhalt Null oder "" ist bevor er nachgibt. Ist das eine Quelle oder Diskussion, etc. zu diesem Thema, damit ich mehr lerne? Vielen Dank. –