0
0

Delete article

Deleted articles cannot be recovered.

Draft of this article would be also deleted.

Are you sure you want to delete this article?

More than 3 years have passed since last update.

[Ruby] 簡単例: Singleton(モジュール)

Last updated at Posted at 2021-09-15
本シリーズのトップページ
[Ruby] デザインパターンの簡潔サンプルコード集

概要

既存コードへの機能追加の際に Singleton を追加したときの記録.

Singleton の概念などは省略.
単に Ruby でどう書くかだけを書き残す.

ファイル構成

・モジュール mod.rb で定義したデータを Singleton にする
・下記 user1.rb と user2.rb は mod.rb を include する

.
|-- mod.rb .... モジュール.
|-- user1.rb .. 上記 mod.rb の使用者その1
`-- user2.rb .. 上記 mod.rb の使用者その2

実装

mod.rb

「@a」を(同一プロセス上の) プログラム各所からアクセスできるようにする

module M
  @a = '' # 保持したい値を持たせる

  class << self
    def a() # Getter
      @a
    end

    def a=(b) # Setter
      @a = b
    end
  end
end

user1.rb

既存のユーザ側の冒頭処理.
前述の @a に値を設定する.

 #!/usr/bin/env ruby
 # -*- encoding: utf-8 -*-
+require_relative 'mod'

 if __FILE__ == $0
+  include M
+  M.a = '/home/foo/.env' # ← プログラム全体から参照したいファイルを定義する
   略
 end

user2.rb

既存のユーザ側のとある処理.
前段である user1.rb で設定された @a の値を取り出している.

+require_relative 'mod'

 class MyClass
+  include M
   def foo
+    puts "M.a => #{M.a}"
   end
 end

参考情報

https://buildersbox.corp-sansan.com/entry/2019/04/16/110000
・Rubyによるデザインパターン

以上

0
0
0

Register as a new user and use Qiita more conveniently

  1. You get articles that match your needs
  2. You can efficiently read back useful information
  3. You can use dark theme
What you can do with signing up
0
0

Delete article

Deleted articles cannot be recovered.

Draft of this article would be also deleted.

Are you sure you want to delete this article?