Ruby - 为什么方法中的方法不好?

时间:2014-07-03 08:49:57

标签: ruby methods

何时在方法中使用方法是一种好习惯?

以下是方法中方法的一个不好用的例子:

class SomeClass
  def self.fooify(a, b, c)
    def self.bar?(a)
      (a % 3) == 0
    end

    return a if self.bar?(a)
    return b + c
  end
end

奖励积分 - 你怎么会残留吧?

1 个答案:

答案 0 :(得分:2)

您可以在方法中使用方法定义,因此在调用父方法时会定义这些内部方法:

class A
  def self.define_foo
    def foo
      :foo
    end
  end
end

a = A.new
a.foo      #=> undefined method foo
A.define_foo
a.foo      #=> :foo

然而,这种情况相当罕见,因为通过这种方式定义的方法无法访问传递给父代的params。更有用的是使用define_method进行绑定已创建的方法:

class A
  def self.define_sth(sth)
    define_method sth do 
      sth
    end
  end
end

a = A.new
a.bar      #=> undefined method bar
A.define_sth(:bar)
a.bar      #=> :bar

这在定义关联时由rails使用。当您致电Parent.has_one :child时,方法has_one会调用define_method来创建childchild=build_childcreate_child方法。

对于存根,以这种方式创建的方法与其他方法没什么区别,你只需像往常一样存根。