1

メインプログラムにこれがある場合:

def hi
  puts 'hi'
end
self.hi

hiプライベートなので機能しません。

Ruby のすべてのメソッドがデフォルトで public であることを知りましたが、そうではないようです。なぜですか?

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

「最上位プロシージャ」を除いて、メソッドはデフォルトで public です。トップレベルのプロシージャのように見えるものを定義すると、実際privateには のインスタンス メソッドとして定義されますObject

于 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 に答える