如何在ruby中定义私有方法?

时间:2014-02-26 00:47:24

标签: ruby-on-rails ruby

我是一名PHP程序员。刚开始学习Ruby。我对ruby的私人声明感到困惑。

假设我有这样的代码

private
def greeting
  random_response :greeting
end

def farewell
  radnom_response :farewell
end

私人是否只适用于问候语或问候和告别?

4 个答案:

答案 0 :(得分:5)

将私有/受保护的方法放在文件的底部是相当标准的。 private之后的所有内容都将成为私有方法。

class MyClass

  def a_public_method

  end

  private

    def a_private_method
    end

    def another_private_method
    end

  protected
    def a_protected_method
    end

  public
    def another_public_method
    end
end

正如您在此示例中所看到的,如果确实需要,您可以使用public关键字返回声明公共方法。

通过将私有/公共方法缩进到另一个级别,可以更容易地看到范围发生变化,从视觉上看它们是在private部分下分组等。

您还可以选择仅声明一次性私有方法:

class MyClass

  def a_public_method

  end

  def a_private_method
  end

  def another_private_method
  end
  private :a_private_method, :another_private_method
end

使用private模块方法仅将单个方法声明为私有方法,但坦率地说,除非您在每个方法声明之后总是这样做,否则找到私有方法会有点混乱。我只想把它们放在底部:)

答案 1 :(得分:2)

在Ruby 2.1中,方法定义返回它们的名称,因此您可以在传递函数定义的类上调用private。您还可以将方法名称传递给private。在没有任何参数的private之后定义的任何内容都将是私有方法。

这为您提供了三种声明私有方法的方法:

class MyClass
  def public_method
  end

  private def private_method
  end

  def other_private_method
  end
  private :other_private_method

  private
  def third_private_method
  end
end

答案 2 :(得分:1)

它适用于private下的所有内容,即greetingfarewell

要将其中任何一个设为私有,您可以将greeting设为私有,如下所示:

def greeting
  random_response :greeting
end
private :greeting

def farewell
  radnom_response :farewell
end

文档位于Module#private

答案 3 :(得分:0)

在Ruby 2.1中,您也可以将单个方法标记为私有方法(空格是可选的):

class MyClass

    private \
    def private_method
        'private'
    end

    private\
    def private_method2
        'private2'
    end

    def public_method
        p private_method
        'public'
    end
end

t = MyClass.new
puts t.public_method        # will work
puts t.private_method       # Error: private method `private_method' 
                            #  called for #<MyClass:0x2d57228> (NoMethodError)