Confusão com a operação de atribuição dentro de um bloco falso se `[duplicado]

Esta pergunta já tem uma resposta aqui:

Eu não entendo o escopo local do ruby 5 respostas

Eu estava brincando com a operação de atribuição dentro deif blocks e descobriu o resultado abaixo, o que me surpreendeu:

C:\>irb --simple-prompt
if false
x = 10
end
#=> nil
p x
nil
x.object_id
#=> 4
#=> nil
p y
NameError: undefined local variable or method `y' for main:Object
        from (irb):5
        from C:/Ruby193/bin/irb:12:in `<main>'

No código acima, você pode ver que ox variável local @ foi criada, mesmo que tenha sido atribuída apenas no diretório falsif quadra. Tentei ver o conteúdo dex comp x o que me forçou a acreditar que a tarefa não foi concluída, mas ox variável @ existe.x.object_id também provou que é esse o caso.

Agora minha pergunta é como issox variável local foi criada mesmo que oif o ponto de entrada do bloco é fechado intencionalmente para sempre?

Eu esperava a saída dep x seja semelhante à saída dep y. Mas, em vez disso, recebi uma resposta surpreendente dep x.

lguém poderia me explicar como esse conceito funcion

EDITA

Não, aqui está outro teste. Este não é o caso apenas comlocal variáveis. O mesmo aconteceu cominstance eclass variáveis também. Veja abaixo:

class Foo
  def show
    @X = 10 if false
    p @X,"hi",@X.object_id
  end
end
#=> nil
Foo.new.show
nil
"hi"
4
#=> [nil, "hi", 4]

class Foo
  def self.show
    @@X = 10 if false
    p @@X,"hi",@@X.object_id
  end
end
#=> nil
Foo.show
nil
"hi"
4
#=> [nil, "hi", 4]

aso de sucesso:

class Foo
  def self.show
    @@X = 10 if true
    p @@X,"hi",@@X.object_id
  end
end
#=> nil
Foo.show
10
"hi"
4
#=> [10, "hi", 4]

questionAnswers(3)

yourAnswerToTheQuestion