2015-07-21 87 views
1

我從我需要使用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),和一個是關於關鍵字參數。如果你有兩個問題,你應該問兩個問題。 –

回答

5

在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(對於類方法)。