2

到目前为止,我已经学习 Rails 的时间不长了....所以如果有请随时纠正我

我看到在rails中有两种定义方法的方法

  1. def method_name(param)
  2. def self.method_name(param)

不同之处(据我所知)是 1 主要用于控制器,而 2 用于模型......但偶尔我会遇到定义为 1 的模型中的方法。

您能向我解释一下这两种方法的主要区别吗?

4

2 回答 2

4

数字 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
于 2012-08-03T14:34:41.590 回答
2

方法 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
于 2012-08-03T14:39:01.457 回答