1

我在 Rails 视图部分的开头有这个:

<% enabled = true unless defined?(enabled) %>

enabled这是通过设置默认值来处理调用视图未传入本地的情况。

enabled不会设置为真。

我知道这个结构enabled ||= true,但我不能在这里使用它,因为传入的值可能是false. 那将被覆盖true

4

2 回答 2

2

这修复了它:

<%
  unless defined?(enabled)
    enabled = true
  end
%>

由于 ruby​​ 解析器的工作方式,这似乎正在发生。

问题中的后缀条件出现在赋值代码之后,我认为解析器导致变量以一个nil值出现,使defined?返回为假。

请参阅此 ruby​​ 论坛帖子

于 2013-06-14T19:59:48.930 回答
1

defined?通过与 OR 运算符结合使用,您可以实现与您最初尝试做的类似的效果||

defined?(enabled) || enabled = true

例子:

2.4.4 :001 > enabled
NameError: undefined local variable or method `enabled' for main:Object
    from (irb):1
        ...(etc.)
2.4.4 :002 > defined?(enabule) || enabled = true
 => true 
2.4.4 :003 > enabled
 => true 
2.4.4 :004 > enabled = false
 => false 
2.4.4 :005 > defined?(enabule) || enabled = true
 => true 
2.4.4 :006 > enabled
 => true 
于 2019-05-30T22:43:55.980 回答