1. ホーム
  2. ruby

[解決済み] Rubyのプライベートモジュールメソッド

2022-09-07 01:06:48

質問

2つの質問に分かれています。

ベストプラクティス

  • パブリックインターフェースを使ってデータ構造に対して何らかの操作を行うアルゴリズムがあります。
  • これは現在、多数の静的メソッドを持つモジュールで、1つのパブリックインターフェースメソッド以外はすべてプライベートです。
  • すべてのメソッド間で共有される必要があるインスタンス変数が1つあります。

これらは私が見ることができるオプションです、どれがベストですか。

  • モジュール 静的(rubyでは'module')メソッドを持つ
  • クラス 静的メソッドを持つ
  • ミキシン データ構造に組み込むためのモジュール
  • リファクタリング アルゴリズムのうち、そのデータ構造を変更する部分(非常に小さい)を取り除き、アルゴリズムモジュールの静的メソッドを呼び出すミキシンとする。

技術的な部分

を作る方法はありますか? プライベートモジュールメソッド ?

module Thing
  def self.pub; puts "Public method"; end
  private
  def self.priv; puts "Private method"; end
end

private は何の効果もないようです。 を呼び出すことができます。 Thing.priv を問題なく呼び出すことができます。

どのように解決するのですか?

これを行うための最良の方法(そして既存のライブラリの書き方)は、すべてのロジックを処理するクラスをモジュール内に作成し、モジュールは単に便利なメソッドを提供することだと思います、例えば

module GTranslate
  class Translator
    def perform(text)
      translate(text)
    end

    private

    def translate(text)
      # do some private stuff here
    end
  end

  def self.translate(text)
    t = Translator.new
    t.perform(text)
  end
end