Warning: file_get_contents(/data/phpspider/zhask/data//catemap/5/ruby/22.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Ruby on rails 如何在Ruby中定义私有方法?_Ruby On Rails_Ruby - Fatal编程技术网

Ruby on rails 如何在Ruby中定义私有方法?

Ruby on rails 如何在Ruby中定义私有方法?,ruby-on-rails,ruby,Ruby On Rails,Ruby,刚开始学习Ruby。我对Ruby的private关键字感到困惑 假设我有这样的代码 private def问候语 随机应答:问候语 结束 再见 随机回应:再见 结束 private是否仅适用于问候语或同时适用于问候语和告别?它适用于private下的所有内容,即问候语和告别 要将其中一个设置为私有,您可以将问候语单独设置为私有,如下所示: def greeting random_response :greeting end private :greeting def farewell

刚开始学习Ruby。我对Ruby的
private
关键字感到困惑

假设我有这样的代码

private
def问候语
随机应答:问候语
结束
再见
随机回应:再见
结束

private
是否仅适用于
问候语
或同时适用于
问候语
告别

它适用于
private
下的所有内容,即
问候语
告别

要将其中一个设置为私有,您可以将
问候语
单独设置为私有,如下所示:

def greeting
  random_response :greeting
end
private :greeting

def farewell
  radnom_response :farewell
end

文档可以在

上找到,将私有/受保护的方法放在文件的底部是相当标准的。
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
module方法仅将单个方法声明为private,但坦率地说,除非您总是在每次方法声明之后立即执行,否则找到私有方法可能会有点混乱。我更喜欢将它们放在底部:)

在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

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

class-MyClass
私人的\
def-private_方法
“私人”
结束
私人的\
def private_method2
“私人2”
结束
def-public_方法
p-u法
“公众”
结束
结束
t=MyClass.new
PUTTS t.public#U方法将起作用
puts t.private_method#错误:private method`private_method'
#需要#(命名者)

这两种方法都适用。。。。
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)