什么是流量?什么是`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
方法?
答
在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
(对于类方法)。
您在这里有两个完全不相干的问题,一个是关于'initialize'(已经被问和StackOverflow上回答了在这里多次,例如:http://stackoverflow.com/a/16247013/2988),和一个是关于关键字参数。如果你有两个问题,你应该问两个问题。 –