- はじめに
- classでprivate以下に記述したとしてもクラスメソッドはprivateにならない
- 方法1:class << self構文を使う
- 方法2: private_class_methodを使う
- 意図しないメソッドの可視性に注意したい
はじめに
私は現在、フィヨルドブートキャンプで、未経験からプログラミング学習をしているものになります。
この記事は、自分自身が学習したことをまとめ、アウトプットすることを目的として書いていますので、間違いがある可能性がありますのでご注意ください。
classでprivate以下に記述したとしてもクラスメソッドはprivateにならない
Rubyでクラス内にprivateを記述し、その配下にクラスメソッドを定義しても外部から呼び出せてしまうので注意が必要です。
class Cat private def self.hello 'meow' end end Cat.hello #=> "meow"
このように呼び出せてしまいました。
privateメソッドが有効なのはインスタンスメソッドだけです。
クラスメソッドをprivateの範囲にいれるには2つ方法があります。
方法1:class << self構文を使う
class Cat class << self private def hello 'meow' end end end Cat.hello #=> private method `hello' called for Cat:Class (NoMethodError)
方法2: private_class_methodを使う
class Cat def self.hello 'meow' end private_class_method :hello end Cat.hello #=> private method `hello' called for Cat:Class (NoMethodError)
クラスメソッドを定義した後にpraivate_class_method
でprivateのメソッドを指定します。
意図しないメソッドの可視性に注意したい
自分で呼び出せると思っていた範囲以上にメソッドが呼び出せてしまうのは意図しないエラーやトラブルにつながる可能性もあるので基礎知識として知っておかなければならないことを勉強していて改めて感じました!
日々勉強ですね🔥