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

问题描述:

我从我需要使用initialize教程回升。下面的代码的一部分:什么是流量?什么是`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

您在这里有两个完全不相干的问题,一个是关于'initialize'(已经被问和StackOverflow上回答了在这里多次,例如:http://stackoverflow.com/a/16247013/2988),和一个是关于关键字参数。如果你有两个问题,你应该问两个问题。 –

在Ruby .new创建一个新对象,并调用对象的方法.initialize。如果没有声明初始化方法,它会调用超类的初始化方法。

所以,当你调用Temperature.new(c: 15)它会通过参数初始化方法:

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表示实例变量initialize是一种方法。在编写约定方法时,约定编写Foo#bar(例如方法)和Foo.bar(对于类方法)。