Когда вы делаете следующее:
class Counter
counter = 0
end
counter
является локальной переменной и исчезает при выходе из определения класса , это означает, что он не существует в любое время позже, и, таким образом, counter
равно nil
, и вы пытаясь вызвать -
(nil
) при выполнении counter -= 1
, что приводит к NoMethodError
. Похоже, вы пытаетесь инициализировать переменную экземпляра во время создания экземпляра:
class Counter
def initialize
@counter = 0
end
def plus
@counter += 1
end
def minus
@counter -= 1
end
def reset
@counter = 0
end
end
Метод initialize
- это имя конструктора в Ruby, которое вызывается при вызове Counter.new
. Также обратите внимание, что я изменил имена методов, чтобы они начинались со строчной буквы, как это принято: имена классов пишутся с большой буквы, а методы и переменные строчными.
Я бы также весьма не рекомендовал бы использовать глобальные переменные (например, $speak
).