Ruby Class init() 设置器的变量
Ruby Class Variable for init() Setters
如何从我想放置在 class 定义中的配置散列中填充实例变量?我有一组开发值和 production
值,我想将它们推入 initialize()
处的实例变量。我怎样才能做到这一点?
这是我的资料:
class Alpha
CONFIG = { development: {mid: '123', uid: 'trial', pin: 'abcde' },
production: {mid: '65432', uid: 'go_go_go', pin: 'kwir7' }
}
def initialize(environment = 'development')
@env = environment
@mid = nil
@uid = nil
@pin = nil
end
end
a = Alpha.new('development)
puts a.inspect
# ==> #<Alpha:0x00007fb1228d6b68 @env="development", @mid=nil, @uid=nil, @pin=nil>
我想使用 Config
常量来填充三个空实例变量。理想情况下,我想将它们设置在 initalize()
内,但是可以调用 private method
来设置这些值。挑战保持不变,使用 class variable
或 constant
从中获取它,但我似乎无法实现。我假设将这样的帐户 key-value pairs
放在 class definition
中是此类应用程序的最佳做法。即:电子商务帐户指标。
我试过以下方法,但似乎无法正确引用 Config
哈希值。
@mid = Alpha::Config[environment.to_s][:mid]
只是为了让没有人在这个 post 上犹豫不决,这个问题 没有 在这些 post 中回答:
Ruby: defining class level hash with default values
Confusion about ruby class variable
请记住,在 Ruby 中,符号和字符串是不等价的,因此在使用符号键查找哈希时必须显式转换:
class Alpha
CONFIG = {
development: { mid: '123', uid: 'trial', pin: 'abcde' },
production: { mid: '65432', uid: 'go_go_go', pin: 'kwir7' }
}
attr_reader :mid, :uid, :pid
def initialize(environment = 'development')
@env = environment.to_sym
@mid = CONFIG.dig(@env, :mid)
@uid = CONFIG.dig(@env, :uid)
@pid = CONFIG.dig(@env, :pid)
end
end
现在可以使用了:
Alpha.new('development').mid
# => "123"
分配 @env
时的 .to_sym
调用负责转换,然后可以在该点之后使用。 dig
用于在未定义特定环境时避免崩溃,值只是出现 nil
。
如何从我想放置在 class 定义中的配置散列中填充实例变量?我有一组开发值和 production
值,我想将它们推入 initialize()
处的实例变量。我怎样才能做到这一点?
这是我的资料:
class Alpha
CONFIG = { development: {mid: '123', uid: 'trial', pin: 'abcde' },
production: {mid: '65432', uid: 'go_go_go', pin: 'kwir7' }
}
def initialize(environment = 'development')
@env = environment
@mid = nil
@uid = nil
@pin = nil
end
end
a = Alpha.new('development)
puts a.inspect
# ==> #<Alpha:0x00007fb1228d6b68 @env="development", @mid=nil, @uid=nil, @pin=nil>
我想使用 Config
常量来填充三个空实例变量。理想情况下,我想将它们设置在 initalize()
内,但是可以调用 private method
来设置这些值。挑战保持不变,使用 class variable
或 constant
从中获取它,但我似乎无法实现。我假设将这样的帐户 key-value pairs
放在 class definition
中是此类应用程序的最佳做法。即:电子商务帐户指标。
我试过以下方法,但似乎无法正确引用 Config
哈希值。
@mid = Alpha::Config[environment.to_s][:mid]
只是为了让没有人在这个 post 上犹豫不决,这个问题 没有 在这些 post 中回答:
Ruby: defining class level hash with default values
Confusion about ruby class variable
请记住,在 Ruby 中,符号和字符串是不等价的,因此在使用符号键查找哈希时必须显式转换:
class Alpha
CONFIG = {
development: { mid: '123', uid: 'trial', pin: 'abcde' },
production: { mid: '65432', uid: 'go_go_go', pin: 'kwir7' }
}
attr_reader :mid, :uid, :pid
def initialize(environment = 'development')
@env = environment.to_sym
@mid = CONFIG.dig(@env, :mid)
@uid = CONFIG.dig(@env, :uid)
@pid = CONFIG.dig(@env, :pid)
end
end
现在可以使用了:
Alpha.new('development').mid
# => "123"
分配 @env
时的 .to_sym
调用负责转换,然后可以在该点之后使用。 dig
用于在未定义特定环境时避免崩溃,值只是出现 nil
。