Рубин: счетчики, счетчики и приращения - PullRequest
2 голосов
/ 15 апреля 2010

Если бы вы видели мои предыдущие вопросы, вы бы уже знали, что я большой любитель, когда дело доходит до Ruby. Итак, я обнаружил этот веб-сайт, который предназначен для программирования на C, но я подумал, что все, что можно сделать в C, должно быть возможно в Ruby (и более читабельно).

Задача состоит в том, чтобы распечатать несколько цифр. Я обнаружил этот изящный метод .upto () и использовал блок (и фактически понял его назначение). Однако в IRb я получил неожиданное поведение.

class MyCounter
    def run 
    1.upto(10) { |x| print x.to_s + " " } 
    end
end


irb(main):033:0> q = MyCounter.new
=> #<MyCounter:0x5dca0>
irb(main):034:0> q.run
1 2 3 4 5 6 7 8 9 10 => 1

Понятия не имею, откуда взято => 1: S Должен ли я сделать это иначе? Я ожидаю получить такой результат:

1 2 3 4 5 6 7 8 9 10

Спасибо за ваши ответы, комментарии и отзывы!

Ответы [ 2 ]

3 голосов
/ 15 апреля 2010

"=> 1" от IRB, а не от вашего кода. После каждого оператора, который вы вводите в IRB, он выводит результат этого оператора после приглашения «=>».

Попробуйте напечатать новую строку в вашей функции:

def run 
  1.upto(10) { |x| print x.to_s + " " }
  print "\n"
end

Тогда это будет выглядеть так:

irb> q.run
1 2 3 4 5 6 7 8 9 10
  => nil
2 голосов
/ 15 апреля 2010

Понятия не имею, откуда взято => 1

Не волнуйся. По умолчанию irb печатает возвращаемое значение выполнения метода.

Даже если вы не напишите оператор return (как, например, в C), Ruby возвращает значение последнего вычисленного оператора.

В данном случае это было 1

Вот и все.

Например, попробуйте:

class WhereIsTheReturn
    def uh?
        14 * 3 # no return keyword
    end
end


whereIsIt = WhereIsTheReturn.new
hereItIs = whereIsIt.uh?
print "Here it is : #{hereItIs}\n"
...