这是我的第一个初始化程序,我不明白错误。
config\initializers\other_server.rb
:
OtherServer.setup do |config|
config.first_server_login = 'qwertyuiop'
config.first_server_password = '12345'
end
lib\other_server_base.rb
:
module OtherServer
mattr_accessor :first_server_login
@@first_server_login = nil
mattr_accessor :first_server_password
@@first_server_password = nil
def self.setup
yield self
end
class Base
def self.session_id
# ................
# How to access first_server_login and first_server_password here?
res = authenticate({
login: first_server_login,
pass: first_server_password })
# ................
end
end
end
lib\other_server.rb
:
module OtherServer
class OtherServer < Base
# ................
end
end
如何在first_server_login
课程中访问first_server_password
和OtherServer::Base
?
如果我致电OtherServer.first_server_login
,则会抱怨缺少OtherServer::OtherServer.first_server_login
成员。
答案 0 :(得分:1)
我找到了正确的答案:
模块和其中的类可以具有相同的名称。在我的例子中,模块成员应该被引用为:
::OtherServer.first_server_login
就是这样。
答案 1 :(得分:0)
首先,您不能对模块和类使用相同的标识符。
module Test;end # => nil
class Test;end # => TypeError: Test is not a class
除此之外,关于您的第一个代码段,该变量无法解析,因为它会尝试在Base
类中解析它而不会扩展OtherServer
(仅在其中定义)它的命名空间)。您仍然可以像这样访问它:
class Base
def self.session_id
OtherServer.first_server_login # this works
end
end