何时在方法中使用方法是一种好习惯?
以下是方法中方法的一个不好用的例子:
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
奖励积分 - 你怎么会残留吧?
答案 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
来创建child
,child=
,build_child
和create_child
方法。
对于存根,以这种方式创建的方法与其他方法没什么区别,你只需像往常一样存根。