所以我学到的是当我在一个对象上调用变量时,例如
my_object.variable
名为variable
的方法返回variable
def variable
@variable
end
在Java中,有访问修饰符。如果getter方法以变量命名,Ruby如何使用访问修饰符?
答案 0 :(得分:7)
首先,在回答问题之前,有一些术语需要清理。
一个是你永远不会“调用”变量。 Ruby表达式
my_object.variable
是方法调用。没有变量调用这样的东西。你调用方法,而不是变量。即使该方法名为variable
。 :)
第二个是你确实定义了这样的方法
def variable
@variable
end
直接或通过说
attr_reader :variable
然后你有一个名为variable
的方法和一个名为@variable
的变量。
现在回答这个问题。
Ruby仅在方法上放置访问修饰符public
,protected
和private
,在变量上放置 not 。对变量的访问控制实际上没有意义,因为它们只能在对象的方法中引用,而且永远不会带有前缀!换句话说,你永远不能写下这个:
obj.@var
这只是一个语法错误。你可以写
obj.var
其中var
是方法的名称。访问控制仅适用于该方法。
您可能正在制作具有相同名称的变量和方法(@
除外)这一事实并不重要。只有方法才有访问控制。
希望这有助于澄清一些可以理解的混乱!
答案 1 :(得分:2)
有几种方法可以在Ruby中将方法设为私有。
使用private
将所有后续方法设为私有:
class Foo
def public_method
end
private
def private_method
end
end
或者在定义方法后将方法设为私有:
class Foo
def public_method
end
private :public_method # public_method is now private
end
或者 - 因为方法定义也返回一个符号 - 这也有效:
class Foo
private def method_name
end
end