如果我的主程序中有这个:
def hi
puts 'hi'
end
self.hi
它不起作用,因为它hi
是私有的。
我了解到 Ruby 中的所有方法默认情况下都是公共的,但似乎并非如此,为什么呢?
如果我的主程序中有这个:
def hi
puts 'hi'
end
self.hi
它不起作用,因为它hi
是私有的。
我了解到 Ruby 中的所有方法默认情况下都是公共的,但似乎并非如此,为什么呢?
在main
环境中定义方法很棘手。当您在 中定义方法时,默认情况下它是私有的main
。因此,您要么必须将其用作私有:
def hi
puts 'hi'
end
hi
或明确公开:
def hi
puts 'hi'
end
public :hi
self.hi
默认情况下,方法是公共的,“顶级过程”除外。如果你定义了一些看起来像顶级过程的东西,它实际上会被定义private
为Object
.
def main_method
p "This is from main_method"
end
public :main_method
class Klass
def initialize
Object.main_method # Or we can simply say main_method as we do in the second exaple
end
end
puts Klass.new
这是创建对象“类方法”的方法,如图所示。如果它是私有的,那么我们无法指定接收者。
当它是私有的(默认情况下)时,我们会这样称呼它:
def main_method
p "This is from main_method"
end
class Klass
def initialize
main_method # With it being private, implicit self only
end
end
puts Klass.new
那么这两种方式有什么优势吗?我想如果你把它设为私有,你会向开发人员发送某种你有偏好的通信,这应该用作私有方法,而不是公共方法。
在实践中,我没有看到优势。