ジョギング
- 引き続き、休み
- 腰の調子はだいぶん良くなってきた
日課
- 合わせて休み
一面の銀世界
- 朝目覚めたら、本当に一面の銀世界だった
今日のるびぃ ~ メソッドの公開レベルについて ~
引き続き, プロを目指す人のためのRuby入門 言語仕様からテスト駆動開発・デバッグ技法まで の読書メモ.
public メソッド
- クラス外部からでも自由に呼び出せるメソッド
- initialize メソッド以外のインスタンスメソッドはデフォルトで public になる
class Foo # デフォルトは public メソッド def foo 'foo' end end f = Foo.new f.foo #=> "foo"
private メソッド
- レシーバを指定出来ない
- クラス外部から呼び出すことが出来ない (レシーバを指定出来ないので)
- サブクラスから呼び出すことが出来る
class Foo private def foo 'foo' end end f = Foo.new f.foo #=> NoMethodError: private method `foo' called for #<Foo:0x0055bd7e4e17b8>
以下, サブクラスから呼び出せるの図.
class Foo private def foo 'foo' end end class FooExt < Foo def fooext foo end end f = FooExt.new f.fooext #=> "foo"
サブクラスから呼び出せるし, オーバーライトも出来るとのこと.
混乱してしまいそう...
後から private メソッドを定義する場合...
class Foo def foo 'foo' end def bar 'bar' end # private メソッドになる private :foo, :bar # ここは public メソッドになる def baz 'baz' end end f = Foo.new f.foo # NoMethodError: private method `foo' called for #<Foo:0x005589bf537728> f.bar # NoMethodError: private method `bar' called for #<Foo:0x005589bf537728> f.baz #=> "baz"
ふむふむ.