我需要检查是否设置了两个环境变量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?()功能。但不是上面扩展的语法。
答案 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值的方式表达。