【发布时间】:2015-07-02 13:17:15
【问题描述】:
我正在尝试从中清理我的代码...
<% if defined? foo == "local-variable" %>
<% foo = foo %>
<% else %>
<% foo = nil %>
<% end %>
要像这样使用三元运算符...
<% defined? foo == "local-variable" ? foo : nil %>
但是三元不能正常运行并且默认为nil ...我对使用三元运算符相当陌生(可能已经养成使用它们的习惯,因为它们可以节省行数)...正在使用@ 987654324@在三元中可能吗?
【问题讨论】:
-
顺便说一句,您的第二个语句不等于第一个 - 缺少赋值,即
foo未设置为nil。 -
真的需要
foo = foo吗? -
@limekin 不,我更倾向于建议
<% foo=nil unless local_variable_defined?(foo) %>或@PiotrKruczek 建议<% foo ||= nil %>,但无论哪种方式,这些都与问题无关。我也不知道这里的实现,也不知道为什么这个逻辑必须存在于视图而不是控制器或模型中。 -
另外考虑到 == 是一种方法,并且 Ruby 中的方法调用是从右到左评估的,我认为在您的初始代码中
foo == 'local-variable'首先评估给false,然后是defined? false被评估,这使得 if 条件总是返回 true。
标签: ruby