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.generate
和Invoice.generate
之间的区别应该是显而易见的。关于ruby - self.generate和Invoice.generate有什么区别?,我们在Stack Overflow上找到一个类似的问题:https://stackoverflow.com/questions/13448154/