使用内部和私有定义的方法的公共方法

时间:2014-09-25 15:24:08

标签: ruby coding-style

假设我有

class SomeClass
  def some_public_method
    method_1
    method_2
  end

method_1method_2之外的任何内容都不会使用some_public_methodclass 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或者它们应该属于该类)。我认为这个问题不是基于意见的,因为部分原因。请举例说明其他代码如何与这两种方法中的任何一种发生冲突,以证明为什么这两种方法对于更易维护的代码更好。

1 个答案:

答案 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_1method2未在声明类之后定义,因为它们的定义尚未执行。一旦执行some_public_method,就会执行这些定义,并将两种方法添加到类中。它们是公共的还是私有的取决于方法privateprotectedpublic(是的,那些是方法)是否已针对该类执行。如果这些方法都没有执行,则它们是公开的。

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方法。