Alcance variable y orden de análisis vs. operaciones: asignación en un "si"

Mi entendimiento es que elif Las declaraciones al final de la línea se evalúan antes del código al principio de la línea:

'never shown' if (false)

Y la asignación es posible en unaif declaración.

'shown' if (value = 'dave is king')
value #=> "dave is king"

Y, cuando se asigna una variable que no existe, se crea. No hay necesidad de que exista de antemano. ¿Es esto cierto?

Si todas estas suposiciones son ciertas, ¿por qué falla esto?

error_array << error if (error = import_value(value))
#=> undefined local variable or method `error' for

Se asigna un error antes de que la matriz empuja a la derecha? Quiero entender cuando las cosas son evaluadas.

Este sí funciona:

if (error = import_value(value))
  error_array << error
end

Ahora estoy realmente confundido.

Respuestas a la pregunta(3)

Su respuesta a la pregunta