ようへいの日々精進XP

よかろうもん

2018 年 02 月 07 日(水)

ジョギング

  • 引き続き、休み
  • でも、今朝は香椎浜まで散歩出来た

日課

  • お休み

夕飯

今日のるびぃ ~ メソッドの公開レベルについて (2) ~

引き続き, プロを目指す人のためのRuby入門 言語仕様からテスト駆動開発・デバッグ技法まで の読書メモ.

クラスメソッドを private にしたい

  • private キーワードの下に定義したメソッドが private メソッドになるのはインスタンスメソッドだけ
  • クラスメソッドはこの限りではなく, 以下のように private メソッドとして扱われない
class Foo
  private
  def self.foo
    'foo'
  end
end

Foo.foo #=> "foo"

private メソッドとして扱うには, 以下のように書く必要がある.

class Foo
  class << self
    private
    def foo
      'foo'
    end
  end
end

Foo.foo #=> NoMethodError: private method `foo' called for Foo:Class

private_class_method を利用して, 以下のように書くことでも private メソッドになる.

class Foo
  def self.foo
    'foo'
  end
  private_class_method :foo
end

Foo.foo #=> NoMethodError: private method `foo' called for Foo:Class

ふむふむ.