我是一名PHP程序员。刚开始学习Ruby。我对ruby的私人声明感到困惑。
假设我有这样的代码
private
def greeting
random_response :greeting
end
def farewell
radnom_response :farewell
end
私人是否只适用于问候语或问候和告别?
答案 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
下的所有内容,即greeting
和farewell
要将其中任何一个设为私有,您可以将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)