gpt4 book ai didi

ruby-on-rails - 为什么 `a.is_a? Array && !a.empty?` 引发 NoMethodError?

转载 作者:数据小太阳 更新时间:2023-10-29 08:21:50 26 4
gpt4 key购买 nike

我是一名 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/

26 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com