У меня есть класс Temperature, с двумя подклассами Цельсия и Фаренгейта, которые в своих методах инициализации принимают аргумент с Fixnum как температуру, которая затем вызывает супер инициализацию с температурой как запись в опции хэш.Правильная инициализация Ruby не соответствует правильному аргументу
Однако, если я позвоню Celsius.new(50)
, в суперкласса код инициализации я получаю сообщение об ошибке «NoMethodError: неопределенный метод` каждый»50: Fixnum» означает исходный аргумент из конструктора подкласса не передается как опции хэш.
Я не могу на всю жизнь понять, почему это происходит!
Пожалуйста, смотрите мой код ниже:
class Temperature
def initialize(opts={})
opts.each { |k,v| instance_variable_set("@#{k}", v) }
end
def self.from_celsius(c)
Temperature.new(:c => c)
end
def self.from_fahrenheit(f)
Temperature.new(:f => f)
end
def self.ftoc(n)
(n - 32) * (5.0/9.0)
end
def self.ctof(n)
n * (9.0/5.0) + 32
end
def in_fahrenheit
@f.nil? ? Temperature.ctof(@c) : @f
end
def in_celsius
@c.nil? ? Temperature.ftoc(@f) : @c
end
end
class Celsius < Temperature
def initialze(n)
super(:c => n)
end
end
class Fahrenheit < Temperature
def initialize(n)
super(:f => n)
end
end
Не совсем - это означает, что он звонит суперкласса инициализируем с вашим «50» Я не знаю решения. .. но вот в чем проблема –