1

目前正在编写一个类,其中我正在考虑将其设为私有的方法分布在整个代码中。我不想在其下方添加private一行并复制粘贴所有内容,而是想在类的顶部进行内联声明,例如private :foo, :bar.

但是,每当我尝试将带有参数的方法声明为私有内联时,都会收到一条错误消息。例如,如果我有一个方法foo(bar, baz),并尝试将其声明为私有,private :foo(bar, baz)我会在两个括号中收到错误消息,期望kEND=代替。

如果我尝试用 声明它private :foo,我会被告知我的代码中没有这样的方法foo

如何在不出现这些错误的情况下做我想做的事情?

4

1 回答 1

9

TL; DR private :foo必须出现方法定义之后。

private的参数应该是一个符号(例如,:foo),而不是一个调用(例如,foo(bar, baz)1

Ruby 类声明只是代码:语句按照它们编写的顺序执行。调用private :foo检查类的foo方法。如果尚未定义,则为错误。


更新为最近的 Ruby

def关键字现在返回被定义方法的符号,允许:

private def foo; ... ; end

1 除非它是返回方法符号的类方法调用,否则是边缘情况。

于 2011-12-05T23:39:28.323 回答