默认情况下所有方法都是公开的

时间:2013-10-23 22:57:33

标签: ruby

如果我在我的主程序中有这个:

def hi
  puts 'hi'
end
self.hi

它不起作用,因为hi是私有的。

我已经了解到默认情况下Ruby中的所有方法都是公开的,但事实并非如此,为什么?

3 个答案:

答案 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                

这两种方式都有任何优势吗?我想如果你把它变成私有的,你就会向开发者发送一些你喜欢的通信,这应该用作私有方法,而不是公共方法。

在实践中,我没有看到任何优势。