2015-07-21 9 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 для методов класса.

Смежные вопросы