Jest to spowodowane tym, że zmienne są inicjowane w Ruby, co jest raczej unikalne dla tego języka. Zasadniczo Ruby inicjuje (tworzy) zmienną, jeśli możliwe jest przypisanie jej wartości. Rozważmy następujący przykład:
if false
x = "hello"
end
x
pewno nie są przydzielane ciąg "hello"
tutaj. Jednak nadal będzie on inicjowany za pomocą nil
, ponieważ z analizy statycznego programu można go było przypisać.
Twój przykład jest podobny. Ponieważ przypisujesz coś do x
, zostanie ono zainicjowane przed nil
przed wykonaniem instrukcji. Tak więc podczas wykonywania, x
jest w rzeczywistości nil
.
Zobacz: http://stackoverflow.com/questions/8908050/why-is-a-a-nil-in-ruby –
Dziękuję, przepraszam za duplikat, którego nie mogłem znaleźć. – mechanicalfish