比方说我有以下情况:
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
。我该如何缓解这个问题呢?
答案 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"
之后。