使用定义?在三元运算符中

时间:2015-07-02 13:17:15

标签: ruby

我正在尝试清理我的代码...

<% if defined? foo == "local-variable" %>
    <% foo = foo %>
<% else %>
    <% foo = nil %>
<% end %>

使用像这样的三元运算符......

<% defined? foo == "local-variable" ? foo : nil %>

然而三元不能正常运行并且默认为nil ...我对使用三元运算符相当新(可能已经养成了使用它们的习惯,因为它们可以保存线条)...是在三元组中使用defined?

2 个答案:

答案 0 :(得分:4)

应该是:

<% defined?(foo) == "local-variable" ? foo : nil %>

From documentation

  

...返回值提供有关表达式的信息。

>> defined?(foo) == "local-variable"
=> true
>> defined? foo
=> "local-variable"
>> defined? (foo == "local-variable")
=> "method"

Ruby operator precedence

答案 1 :(得分:2)

这不是你问题的答案,但这样的事情可能会有所帮助:

foo ||= nil

转换为:

if defined? foo
  foo || foo = nil
else
  foo = nil
end