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
Run Code Online (Sandbox Code Playgroud)
你为什么要创建Invoice.generate内部Invoice课而不是self.generate?
self.generate更容易使用,而Invoice.generate可以说更明确.除此之外,两者之间没有区别.
您可以使用此表单在任何实例上定义方法
def receiver.method(args)
end
Run Code Online (Sandbox Code Playgroud)
看一下这个
class Foo
end
def Foo.bar
"bar"
end
Foo.bar # => "bar"
Run Code Online (Sandbox Code Playgroud)
是的,我的意思是任何实例.绝对有可能一个实例有一些方法,而另一个实例没有
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)
Run Code Online (Sandbox Code Playgroud)
提醒:类定义内部(但在方法定义之外)self指向该类.
class Foo
# self is Foo
end
Run Code Online (Sandbox Code Playgroud)
所以,有了这些知识,之间的区别self.generate,并Invoice.generate应该是显而易见的.