加入收藏 | 设为首页 | 会员中心 | 我要投稿 李大同 (https://www.lidatong.com.cn/)- 科技、建站、经验、云计算、5G、大数据,站长网!
当前位置: 首页 > 百科 > 正文

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检查(简单)跳到字符串的比较(稍微复杂一点).这些天给计算机供电,如果性能不是你的问题,那对你来说就没问题了.

因此,总而言之:字符串检查更加人性化,速度更慢,存在检查更快但更模糊.

(编辑:李大同)

【声明】本站内容均来自网络,其相关言论仅代表作者个人观点,不代表本站立场。若无意侵犯到您的权利,请及时与联系站长删除相关内容!

    推荐文章
      热点阅读