我需要一个类来返回另一个类,但是没有这样做。你能解释一下为什么会这样吗?在这里,我不包括Temperature
课,因为我认为这是无关紧要的。
class Celsius
attr_accessor :temp
def initialize(cel)
return Temperature.new({:c =>cel})
end
end
class Fahrenheit
def initialize ( far )
Temperature.new({:f => far})
end
end
我想调用Fahrenheit
类来返回Temperature
类
puts Fahrenheit.new(0) #=> returns Fahrenheit class instead of Temperature
在Celsius
中,我尝试使用return
,但它没有帮助。
答案 0 :(得分:2)
华氏度而不是温度
这是正确的,因为::new
consctuctor返回一个新创建的类实例,该实例已指定为Temperature
。但#initialize
实际上不是类构造函数,它只是一个初始化回调方法。
您可以使用以下方案:
far = Fahrenheit.new( 0 )
far.to_c # => Celsius
和方案的Fahrenheit
类:
class Fahrenheit
def initialize( far )
@temp = far
end
def to_c
Celsius.new @temp
end
end
为了检测该类是否属于Temperature
类,只需从中继承Fahrenheit
,并检查如下:
class Fahrenheit < Temperature
end
far = Fahrenheit.new
far.is_a?( Temperature )
# => true
答案 1 :(得分:1)
initialize
不会以任何方式使用new
的返回值,因此从initialize
返回内容无效。让Foo.new
返回Foo
之外的其他内容的唯一方法是直接覆盖new
,但这通常不是一个好主意,因为它会让您的代码读者感到非常困惑
如果您无意创建Celsius和Fahrenheit类的实例,那么它们可能不应该是第一个类。在这种情况下,如果您的Temperature
班级有类方法celsius
和fahrenheit
,那么对我来说似乎最明智。
答案 2 :(得分:0)
只是为了显示结果代码。 这么简单,但我还是要问:)
class Celsius
def.self.new(cel)
return Temperature.new({:c => cel})
end
end