

rubyのclass内で共通のオブジェクトを使用するにはどうしたらよいのでしょうか。  
クラスメソッドに定義したいので、initializeを使わない方法を教えて下さい。

イメージとしては以下のような感じです。

[code]

    class Hoge
    
      @obj = Fuga.new
    
      def self.test
        @obj.abcd
      end
      def self.test2
        @obj.efg
      end
    
    end
    
[/code]


CC BY-SA 3.0
2015-08-24T02:48:10.507
14771
2016-10-18T08:10:46.083
10439
question
ruby
rubyのclass内で共通のオブジェクトを使いたい


質問で書かれているコードでも良さそうですが、オブジェクトを取得するクラスメソッドを定義し、その中で遅延初期化のイディオムを使うと、なんとなくお行儀が良い気がします。

[code]

    class Bar
      def initialize
        puts 'Initialized.'
      end
    
      def hello
        puts 'Hello'
      end
    
      def bye
        puts 'Bye'
      end
    end
    
    class Foo
      def self.hello
        bar.hello
      end
    
      def self.bye
        bar.bye
      end
    
      def self.bar
        @bar ||= Bar.new
      end
    end
    
    # クラスメソッドの呼び出し
    Foo.hello
    # => Initialized.
    # => Hello
    
    Foo.bye
    # => Bye
    
[/code]


CC BY-SA 3.0
2015-08-24T22:00:03.307
14813
2015-08-24T22:00:03.307
85
14771
answer