Частный метод, называемый ошибкой
Написали метод; когда я пытаюсь запустить его, я получаю сообщение об ошибке:
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)
Ответы
Ответ 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.