Rubyのprivateメソッドがやや難しいので、まだメモ段階だが記録していく。
#1. privateメソッドはレシーバを表記しない
privateメソッドはレシーバがself
です。ただ、基本的にはレシーバが省略されることは多いです。
また、private下に書いても、self.hoge
のように書いてしまうとクラスメソッドとして定義されてしまうので気をつけましょう。
例
class Test
def test
puts 'public instance_method'
end
def self.test #クラスメソッド
work
puts 'public class_method'
end
private
def self.work2
puts 'class method'
end
end
これは残念ながら、他のクラスからも呼び出せてしまいます。Test.work2
で。
ちなみに下記はprivateメソッドとして定義されます。
def self.fuga()
end
private_class_method :fuga
#2.privateのselfの定義
privateメソッドにもレシーバが二つのパターンがあります。
- class
- classのオブジェクト
です。
class Test
def test
work_instance
puts 'public instance_method'
end
def self.test #クラスメソッド
work_class
puts 'public class_method'
end
class << self
private
def work_class
puts 'private class_method'
end
end
private
def work_instance
puts 'private instance_method'
end
end
このようになっていますね。
privateメソッドはselfをレシーバとしますが、クラスメソッドのなかで使う時はselfがクラス自身であるprivateメソッドを使いましょう。
まだ完全な理解とは言えない部分もあるので、updateしていきます。
ご指摘あればお願いします。