我从教程中选择了我需要使用的initialize
。这是代码的一部分:
class Temperature
def initialize(c: nil, f: nil)
@fahrenheit = f
@celsius = c
end
def in_celsius
@celsius ||= (@fahrenheit - 32) * 5.0 / 9
end
end
这里的rspec测试:
describe "in degrees celsius" do
it "at 50 degrees" do
Temperature.new(:c => 50).in_celsius.should == 50
end
在测试上面的块时,值50
附加到键:c
。 @celsius = c
是否意味着c
是:c
密钥的值? new
方法会自动指向initialize
方法吗?
答案 0 :(得分:5)
在Ruby .new
中创建一个新对象并在该对象上调用.initialize
方法。如果没有声明initialize方法,则调用超类的初始化器。
因此,当您调用Temperature.new(c: 15)
时,它会将参数传递给initialize方法:
def initialize(c: nil, f: nil)
# Arguments in here are passed from .new
@fahrenheit = f # alters the temperature instance
@celsius = c # alters the temperature instance
puts self.inspect # will show you that self is the new Temperature instance
end
旁注:
它不是@intialize
,因为at符号表示实例变量。 initialize
是一种方法。在编写方法时,约定是为实例方法编写Foo#bar
,为类方法编写Foo.bar
。