ruby-on-rails – 带有Rails ENV变量的布尔逻辑
发布时间:2020-12-17 03:25:17 所属栏目:百科 来源:网络整理
导读:由于Rails ENV变量应该只有字符串值,因此决定如何将ENV变量用于需要布尔逻辑的用例可能是个问题.例如,因为ENV变量有一个字符串值,它总是很简单,所以做这样的事情不会太好: if ENV['MY_VARIABLE'] # do somethingelse # do something elseend 所以至少有两种
由于Rails ENV变量应该只有字符串值,因此决定如何将ENV变量用于需要布尔逻辑的用例可能是个问题.例如,因为ENV变量有一个字符串值,它总是很简单,所以做这样的事情不会太好:
if ENV['MY_VARIABLE'] # do something else # do something else end 所以至少有两种方法可以完成上述事情: 初始化具有特定值的变量并检查它 if ENV['MY_VARIABLE'] == 'some string' # do something elsif ENV['MY_VARIABLE'] == 'some other string' # do something else end 或者只是使用任何值初始化变量并检查它是否已初始化(代码可能完全符合我们的要求). if ENV['MY_VARIABLE'] # do something else # do something else end 问题是什么选项更受欢迎,它们各自的优缺点是什么? 解决方法
您可能应该重构代码并使用自定义类,因此它更易于维护并且可以轻松地进行更改:
class MyEnv TRUTHY_VALUES = %w(t true yes y).freeze FALSEY_VALUES = %w(f false n no).freeze attr_reader :value def initialize(name) @value = ENV[name].to_s.downcase end def to_boolean return true if TRUTHY_VALUES.includes?(value.to_s) return false if FALSEY_VALUES.includes?(value.to_s) # You can even raise an exception if there's an invalid value raise "Invalid value '#{value}' for boolean casting" end end # Usage example: MyEnv.new("MY_VARIABLE").to_boolean 我认为,对于布尔环境变量,使用yes,true,no等值而不是现有或不存在变量更加人性化. 我在这里看到的唯一缺点就是性能,你可以从nil检查(简单)跳到字符串的比较(稍微复杂一点).这些天给计算机供电,如果性能不是你的问题,那对你来说就没问题了. 因此,总而言之:字符串检查更加人性化,速度更慢,存在检查更快但更模糊. (编辑:李大同) 【声明】本站内容均来自网络,其相关言论仅代表作者个人观点,不代表本站立场。若无意侵犯到您的权利,请及时与联系站长删除相关内容! |