假设我有
class SomeClass
def some_public_method
method_1
method_2
end
method_1
除method_2
之外的任何内容都不会使用some_public_method
和class SomeClass
def some_public_method
def method_1
p 'hi'
end
def method_2
p 'there'
end
method_1
method_2
end
end
。
可以在该方法中定义它们:
{{1}}
或在课堂上单独定义为私人。我想知道将来哪种方法更容易维护以及为什么(这些方法应该“属于”some_public_method而不是创建,除非创建some_public_method或者它们应该属于该类)。我认为这个问题不是基于意见的,因为部分原因。请举例说明其他代码如何与这两种方法中的任何一种发生冲突,以证明为什么这两种方法对于更易维护的代码更好。
答案 0 :(得分:2)
ruby中没有嵌套方法这样的东西,但是你可以编写定义新方法的方法。通过这样做:
class SomeClass
def some_public_method
def method_1
p 'hi'
end
def method_2
p 'there'
end
method_1
method_2
end
end
方法method_1
和method2
未在声明类之后定义,因为它们的定义尚未执行。一旦执行some_public_method
,就会执行这些定义,并将两种方法添加到类中。它们是公共的还是私有的取决于方法private
,protected
或public
(是的,那些是方法)是否已针对该类执行。如果这些方法都没有执行,则它们是公开的。
s = SomeClass.new
t = SomeClass.new
s.method_1 #=> undefined method error
t.some_public_method
s.method_1 #=> hi
如果再次运行some_public_method
,将重新定义这些方法,这可能会导致警告。
简而言之,不要嵌套方法定义,除非你想要一些不错的元编程功能。即使这样,最好使用define_method
方法。