Ruby 超级初始化没有正确传递参数
Ruby super initialization not passing argument correctly
我有一个 class 温度,有两个子classes,摄氏度和华氏度,它们在它们的初始化方法中接受一个带有 Fixnum 的参数作为温度,然后用温度作为选项散列中的条目。
但是,如果我调用 Celsius.new(50)
,在 superclass 初始化代码中,我收到错误“NoMethodError:
undefined method `each' for 50:Fixnum" 表示来自 subclass 构造函数的原始参数未作为选项散列传递。
我一辈子都弄不明白为什么会这样!
请看下面我的代码:
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
发现问题:
class Celsius < Temperature
def initialze(n)
# should be initialize
super(:c => n)
end
end
我有一个 class 温度,有两个子classes,摄氏度和华氏度,它们在它们的初始化方法中接受一个带有 Fixnum 的参数作为温度,然后用温度作为选项散列中的条目。
但是,如果我调用 Celsius.new(50)
,在 superclass 初始化代码中,我收到错误“NoMethodError:
undefined method `each' for 50:Fixnum" 表示来自 subclass 构造函数的原始参数未作为选项散列传递。
我一辈子都弄不明白为什么会这样!
请看下面我的代码:
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
发现问题:
class Celsius < Temperature
def initialze(n)
# should be initialize
super(:c => n)
end
end