在父模块中访问模块内变量的正确方法

时间:2014-07-18 23:26:30

标签: ruby module

比方说我有以下情况:

module A
  module B

    def self.make
      @correlation_id ||= SecureRandom.uuid
    end

  end
end

现在,对于外部世界,我只希望他们能够通过模块A访问correlation_id:

A.correlation_id。我如何从模块A访问@correlation_id

我做了以下工作,但它有效,但有副作用,我不想要。

module A
  module B

    def self.make
      @correlation_id ||= SecureRandom.uuid
    end

    private

    def self.correlation_id
      @correlation_id
    end
  end

  def self.correlation_id
    A::B.correlation_id
  end
end

有了这个,在我做A::B.make之后,我可以做A.correlation_id,但遗憾的是我也可以做A::B.correlation_id。我该如何缓解这个问题呢?

1 个答案:

答案 0 :(得分:1)

module A
  module B
    def self.make
      @correlation_id ||= SecureRandom.uuid
    end
  end
  def self.correlation_id
    B.instance_variable_get("@correlation_id")
  end
end

为了提高效率,请将.freeze放在"@correlation_id"之后。