我从教程中学习到需要使用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
当它测试上面的块时,value
50
被附加到key:c
上。@celsius = c
是否意味着c
是:c
键的值?new
方法是否自动指向initialize
方法? 最佳答案
在Ruby中,创建一个新对象并对该对象调用.new
方法如果没有声明initialize方法,它将调用超类上的初始值设定项。
因此,当您调用.initialize
时,它会将参数传递给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
侧记:
它不
Temperature.new(c: 15)
,因为at符号表示实例变量@intialize
是一种方法在编写方法时,惯例是编写initialize
实例方法和Foo#bar
类方法。关于ruby - 流量是多少? “初始化”在做什么?,我们在Stack Overflow上找到一个类似的问题:https://stackoverflow.com/questions/31528280/