Подтвердить что ты не робот

Частный метод, называемый ошибкой

Написали метод; когда я пытаюсь запустить его, я получаю сообщение об ошибке:

NoMethodError: private method ‘subtotal’ called for 39.99:Float
at top level    in grades.rb at line 9
Program exited with code #1 after 0.04 seconds.

Ниже приведен код:

def subtotal(qty = 1)
  return nil if self.to_f <= 0 || qty.to_f <= 0
  self.to_f * qty.to_f
end

book = 39.99
car = 16789

puts book.subtotal(3)
puts car.subtotal
puts car.subtotal(7)
4b9b3361

Ответ 1

Когда вы объявляете метод вне любого класса, это частный метод, что означает, что его нельзя вызывать на других объектах. Вам следует открыть класс, в который вы хотите включить этот метод, и затем поместить там определение метода. (Если вы хотите его в нескольких классах, либо откройте общий суперкласс, либо поместите его в модуль и включите этот модуль во все классы.)

Ответ 2

Вы хотите включить метод subtotal в любой класс? Например.

class Numeric
  def subtotal(qty = 1)
    return nil if self.to_f <= 0 || qty.to_f <= 0
    self.to_f * qty.to_f
  end
end

Ответ 3

Я смотрю на это и вижу, что вы вызываете метод subtotal для переменной, содержащей класс Float. Это эквивалентно Float.subtotal. Теперь проблему легко увидеть. Вы не определили метод субтота как часть класса Float.