class Invoice
  def Invoice.generate(order_id, charge_amount, credited_amount = 0.0)
    Invoice.new(:order_id => order_id, :amount => charge_amount, :invoice_type => PURCHASE, :credited_amount => credited_amount)
  end
end

为什么要在类中创建Invoice.generate而不是Invoice

最佳答案

self.generate更容易使用,而Invoice.generate可以说更明确。除此之外,两者没有区别。
解释
可以使用此表单在任何实例上定义方法

def receiver.method(args)
end

看看这个
class Foo
end

def Foo.bar
  "bar"
end

Foo.bar # => "bar"

是的,我指的是任何例子。很有可能一个实例有一些方法,而另一个实例没有
f = Foo.new

def f.quux
  'quux'
end

f2 = Foo.new

f.quux # => "quux"
f2.quux # => # ~> -:20:in `<main>': undefined method `quux' for #<Foo:0x007fe4e904a6c0> (NoMethodError)

提醒:类定义内部(但方法定义外部)self指向该类。
class Foo
  # self is Foo
end

因此,有了这些知识,self.generateInvoice.generate之间的区别应该是显而易见的。

关于ruby - self.generate和Invoice.generate有什么区别?,我们在Stack Overflow上找到一个类似的问题:https://stackoverflow.com/questions/13448154/

10-10 14:10