Ruby-Variablenzuweisung in einem bedingten "if" -Modifikator

Ich habe eine Frage dazu, wie der Ruby-Interpreter Variablen zuweist:

Ich benutze das ziemlich oft:

return foo if (foo = bar.some_method)

Dabei gibt some_method ein Objekt oder nil zurück.

Wenn ich das versuche:

return foo if (true && (foo = bar.some_method))

Ich erhalte: NameError: undefinierte lokale Variable oder Methode foo für main: Object.

Was ist der Unterschied in der Auswertung zwischen der ersten und der zweiten Zeile, der einen Fehler in der zweiten Zeile verursacht?