ruby - 检查两个变量中的任何一个是否存在

ruby - check if either of two variables exist

我需要检查是否设置了两个环境变量 env_http_proxy 或 http_proxy。如果设置了其中一个,则将值分配给局部变量。如果两者都不存在,那么局部变量应该设置为nil。

http_proxy = defined?(ENV['env_http_proxy']) ? ENV['env_http_proxy'] : defined?(ENV['http_proxy']) ? ENV['http_proxy'] : nil

这有什么问题吗?这似乎适用于第一个变量但不适用于第二个变量。 (PS:如果重要的话,我正在尝试在 Vagrantfile 中使用它)

另外,有人可以解释一下上面的语法吗?我是 ruby 菜鸟。快速搜索只显示了 defined?() 函数。但不是上面的扩展语法。

t = ENV['env_http_proxy'] || ENV['http_proxy']

作为一般规则,不要将 defined? 用于任何事情。这是一个元编程原语,用于实现偶尔称为 magic1..

的东西

e1 ? e2 : e3 运算符就像 C 一样工作,测试表达式 e1,然后取 e2 或 e3 的值。它在 Ruby 中的使用不如在其他语言中那么多。

由于 ENV 是一个类似散列的对象,它会 return nil 当不存在密钥时,Ruby 的无数令人敬畏的功能之一就是 || operator returns 表达式的真值。


1。 魔法:名词,见:Ruby on Rails.