1

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

def hi
  puts 'hi'
end
self.hi

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

我了解到 Ruby 中的所有方法默认情况下都是公共的,但似乎并非如此,为什么呢?

4

3 回答 3

3

main环境中定义方法很棘手。当您在 中定义方法时,默认情况下它是私有的main。因此,您要么必须将其用作私有:

def hi
  puts 'hi'
end
hi

或明确公开:

def hi
  puts 'hi'
end
public :hi
self.hi
于 2013-10-23T23:02:34.400 回答
1

默认情况下,方法是公共的,“顶级过程”除外。如果你定义了一些看起来像顶级过程的东西,它实际上会被定义privateObject.

于 2013-10-24T17:51:06.153 回答
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                

这是创建对象“类方法”的方法,如图所示。如果它是私有的,那么我们无法指定接收者。

当它是私有的(默认情况下)时,我们会这样称呼它:

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                

那么这两种方式有什么优势吗?我想如果你把它设为私有,你会向开发人员发送某种你有偏好的通信,这应该用作私有方法,而不是公共方法。

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

于 2013-10-24T01:28:15.723 回答