我从教程中学习到需要使用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

当它测试上面的块时,value50被附加到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/

10-16 05:36