如果我在我的主程序中有这个:
def hi
puts 'hi'
end
self.hi
它不起作用,因为hi
是私有的。
我已经了解到默认情况下Ruby中的所有方法都是公开的,但事实并非如此,为什么?
答案 0 :(得分:3)
在main
环境中定义方法很棘手。默认情况下,在main
中定义方法时,该方法是私有的。因此,您必须将其用作私有:
def hi
puts 'hi'
end
hi
或明确公开:
def hi
puts 'hi'
end
public :hi
self.hi
答案 1 :(得分:1)
默认情况下,方法是公开的,除了用于“顶级程序”。如果您将外观定义为顶级过程,则实际将被定义为private
的{{1}}实例方法。
答案 2 :(得分:0)
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
这是创建Object'类方法'的方法,如图所示。如果它是私有的,那么我们就无法指定接收者。
如果它是私有的,默认情况下是这样,那么我们就这样称呼它:
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
这两种方式都有任何优势吗?我想如果你把它变成私有的,你就会向开发者发送一些你喜欢的通信,这应该用作私有方法,而不是公共方法。
在实践中,我没有看到任何优势。