作者热门文章
- xml - AJAX/Jquery XML 解析
- 具有多重继承的 XML 模式
- .net - 枚举序列化 Json 与 XML
- XML 简单类型、简单内容、复杂类型、复杂内容
我是一名 Python 开发人员,刚开始学习 Rails,所以这可能是一个菜鸟问题。我在我的代码中发现了一些令人惊讶的行为:
<!-- render flash message array if set -->
<% if flash[:notice].is_a? Array && !flash[:notice].empty? %>
这会导致以下错误:未定义的方法“空?”对于 nil:NilClass
Ruby 似乎不应该在该子句的第二部分调用 .empty?
。我确认短路评估在其他情况下有效:
# this is more what I expected
[3] pry(main)> a = nil
=> nil
[5] pry(main)> !a.nil? && a.empty?
=> false
...
[6] pry(main)> a = 1
=> 1
[7] pry(main)> !a.nil? && a.empty?
NoMethodError: undefined method `empty?' for 1:Integer
from (pry):7:in `__pry__'
有人知道为什么会发生这种行为吗?似乎只在我使用 is_a?
而不是其他运算符时触发。
最佳答案
发生这种情况是因为您对 is_a?
函数的参数使用空格而不是方括号,因此 Rails 试图将整个参数作为参数发送。试试这个
<% if flash[:notice].is_a?(Array) && !flash[:notice].empty? %>
解释:
当你编写 flash[:notice].is_a 时? Array && !flash[:notice].empty?
rails 将其解释为 flash[:notice].is_a?(Array && !flash[:notice].empty?)
所以 Array
被评估为 true
并且 !flash[:notice].empty?
被评估引发异常。
关于ruby-on-rails - 为什么 `a.is_a? Array && !a.empty?` 引发 NoMethodError?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/58052202/
我是一名优秀的程序员,十分优秀!