2015-12-09 3 views
0

Может кто-то объяснить, почему следующий код производит:не определен метод: ноль: NilClass

5.times do 
    star_count = star_count + 1 
    puts "*" * star_count 
end 

#=> NoMethodError: undefined method `+' for nil:NilClass 

желаемого эффекта кода является следующее изображение ниже:

* 
** 
*** 
**** 
***** 

Жалко включая треугольник звездочки как код ... не выводил правильно, так что это единственное решение, о котором я мог думать. Обработка треугольника как изображения тоже не работала.

+0

Спасибо, Эрик. Итак, если вы не инициализируете переменную до ссылки на эту переменную в цикле, Ruby всегда будет давать нуль: ошибка NilClass? – user309190

+0

Ну, в этом случае да. Переменная динамически объявляется, но здесь значение «nil». Поэтому вызов '+' терпит неудачу. –

ответ

2

start_count должен быть инициализирован до 0 перед циклом в этом случае.

Во всяком случае, есть более идиоматический в Ruby:

5.times do |index| 
    puts '*' * (index + 1) 
end 
2

Вы также можете использовать upto вместо times начать с другого индекса выше нуля.

1.upto(5) do |index| 
    puts '*' * index 
end 
Смежные вопросы