【发布时间】:2014-01-09 05:13:28
【问题描述】:
我不确定这里的继承发生了什么。我得到这个代码的零值。但是当我不覆盖初始化方法并传入哈希参数时,就像温度类接受 (:c => 50) 一样,它工作正常。
我认为也许工厂方法再次调用了现在已更改的初始化方法?但后来我会认为我得到了一个循环..
谢谢。下面是代码段。这是我对 r-spec 教学资源的解决方案
我想我的问题是:
为什么 self.from_celsius 方法会创建一个不调用转换方法的新实例对象,因为温度中定义的初始化方法应该如此?
class Temperature
######################## -- getter methods
def in_fahrenheit
@in_fahrenheit
end
def in_celsius
@in_celsius
end
######################## -- initialize and call the calculations
def initialize(hash)
@options = hash
conversion
end
######################## -- calculations
def conversion
@options.key?(:c) ? @in_fahrenheit = (9.0/5.0*@options[:c].to_f) + 32.0 : @in_fahrenheit = @options[:f]
@options.key?(:f) ? @in_celsius = (5.0/9.0)*(@options[:f].to_f - 32.0) : @in_celsius = @options[:c]
end
######################## -- factory methods
def self.from_celsius(c)
self.new(:c => c)
end
def self.from_fahrenheit(f)
self.new(:f => f)
end
end
class Celsius < Temperature
def initialize(c)
Temperature.from_celsius(c)
end
end
class Fahrenheit < Temperature
def initialize(f)
Temperature.from_fahrenheit(f)
end
end
x = Celsius.new(50).in_celsius
puts x.nil?
#=> true
【问题讨论】:
-
你有什么问题?
-
问题:为什么 self.from_celsius 方法使用温度类作为模板创建一个新的实例对象,但最终没有为类变量赋值
-
已编辑以包含问题
标签: ruby initialization temperature