【问题标题】:Check for value presence检查价值存在
【发布时间】:2018-03-12 13:18:34
【问题描述】:

我在加载值时使用这个 Ruby 代码。

request_builder = "#{gateway.camelize}RequestBuilder".constantize

但有时 yml 配置文件中缺少值网关。我如何添加检查此值是否存在?例如,如果值 gateway 为空,我想打印一些消息并停止代码执行。

【问题讨论】:

标签: ruby


【解决方案1】:

你可以问网关:

unless gateway&.empty?

或使用 ActiveSupport(Rails):

if gateway.present?

如果网关不存在,则引发异常:

fail "gateway not present" unless gateway.present?
request_builder = "#{gateway.camelize}RequestBuilder".constantize

(顺便说一句,failraise 的别名。有些人喜欢只在 rescue 块内使用 raise,否则使用 fail,但这只是个人喜好问题。)


更新:从 &.present? 中删除了 &,因为 ActiveSupport 在 NilClass 上定义了 present?

【讨论】:

  • 不需要present? 的孤独操作员。 gateway.present? 可以正常工作。
  • 如果配置文件根本不包含该密钥,则不会。但是,如果保证gateway 不是nil,是的,& 符号已过时。
  • 用 nil 试试吧。
  • 如果保证不为零,那么整个问题/答案都无关紧要:)
  • 并非如此。假设在 Rails 应用程序中,每个环境都有不同的 YAML 配置文件,并且并非所有文件都拥有所有密钥。如果gatewaynil,您可能想要引发一个可以理解的异常或优雅地处理它。是否可以是nil,取决于你如何解析YAML并将值赋给gateway
猜你喜欢
  • 1970-01-01
  • 2016-04-07
  • 2012-07-31
  • 2020-08-12
  • 1970-01-01
  • 2021-06-30
  • 1970-01-01
  • 1970-01-01
相关资源
最近更新 更多