メソッドの呼び出しをインスタンス変数が初期化されてないときにだけ行う方法として

def foo
  @foo ||= foo_init
end

のような書き方がありますが、fooが引数を取る時はどのように書くのが良いでしょうか?
現状は

def initialize
  @foo = {}
end

def foo(arg)
  @foo[arg] ||= foo_init(arg)
end

または

def foo(arg)
  @foo = {} if foo.nil?
  @foo[arg] ||= foo_init(arg)
end

としていますがもっと良い書き方はあるでしょうか?