正常行为
ENV[SOME_ENV_VARIABLE]
指向heroku的.env
文件或ENVIRONMENT变量
自定义行为
我想如果有人正在调用ENV[SOME_ENV_VARIABLE]
,我想触发一个带有参数SOME_ENV_VARIABLE
的方法。并且该方法应返回某个值(如果该值为nil
,则应从.env文件返回该值
`ENV[SOME_ENV_VARIABLE]` # a method call to delegate_env_var(key) where key = SOME_ENV_VARIABLE
def delegate_env_var(key) # key is `SOME_ENV_VARIABLE`
value = databasecall(key)
value.nil? ? ENV[SOME_ENV_VARIABLE] : value
end
答案 0 :(得分:0)
ENV
不是方法,而是常量:
> defined? ENV
=> "constant"
您可以将其重新分配给所需的任何对象,甚至是字符串(接受警告):
ENV = "asd"
(pry):27: warning: already initialized constant ENV
=> "asd"
因此您可以创建一个对象,该对象将以您描述的方式实现[]
方法并将其他对象委托给ENV
。
这是非常危险的。我宁愿添加一个包装ENV
的自定义类,并通过该类访问环境变量:
环境类 def self.get #从数据库或ENV获取 结束 结束
答案 1 :(得分:0)
您不能覆盖默认行为,这不是一个好习惯。
也许您想执行以下操作
class Object
def custom_env
value = databasecall(self)
value.nil? ? ENV[self] : value
end
end
并使用SOME_ENV_VARIABLE.custom_env
而不是ENV[SOME_ENV_VARIABLE]