到目前为止,我已经学习 Rails 的时间不长了....所以如果有请随时纠正我
我看到在rails中有两种定义方法的方法
def method_name(param)
def self.method_name(param)
不同之处(据我所知)是 1 主要用于控制器,而 2 用于模型......但偶尔我会遇到定义为 1 的模型中的方法。
您能向我解释一下这两种方法的主要区别吗?
到目前为止,我已经学习 Rails 的时间不长了....所以如果有请随时纠正我
我看到在rails中有两种定义方法的方法
def method_name(param)
def self.method_name(param)
不同之处(据我所知)是 1 主要用于控制器,而 2 用于模型......但偶尔我会遇到定义为 1 的模型中的方法。
您能向我解释一下这两种方法的主要区别吗?
数字 1。这定义了一个instance method
, 可以在模型的实例中使用。
数字 2。这定义了class method
, 并且只能由类本身使用。
例子:
class Lol
def instance_method
end
def self.class_method
end
end
l = Lol.new
l.instance_method #=> This will work
l.class_method #=> This will give you an error
Lol.class_method #=> This will work
方法 self.method_name 定义了类的方法。基本上在类定义中,将 self 视为指的是正在定义的类。因此,当您说 def self.method_name 时,您是在定义类本身的方法。
class Foo
def method_name(param)
puts "Instance: #{param}"
end
def self.method_name(param)
puts "Class: #{param}"
end
end
> Foo.new.method_name("bar")
Instance: bar
> Foo.method_name("bar")
Class: bar