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

时间:2015-09-30 19:47:54

标签: ruby vagrantfile

我需要检查是否设置了两个环境变量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:如果重要的话,我试图在Vagrant文​​件中使用它)

另外,有人可以解释一下上面的语法。我是红宝石的诺布。快速搜索仅显示defined?()功能。但不是上面扩展的语法。

1 个答案:

答案 0 :(得分:3)

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

作为一般规则,请勿将defined?用于任何事情。它是一个元编程原语,用于实现偶尔称为 magic 1。的东西。

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

由于ENV是一个类似哈希的对象,当没有密钥存在时它会返回nil,而Ruby的一个非常棒的特性就是||运算符返回true值的方式表达。

<小时/> 1。 Magic :名词,见:Ruby on Rails.