什么是流量?什么是`initialize`在做什么?

时间:2015-07-21 00:02:58

标签: ruby

我从教程中选择了我需要使用的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方法吗?

1 个答案:

答案 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