gpt4 book ai didi

ruby-on-rails - Unless .blank 之间的问题?而如果

转载 作者:行者123 更新时间:2023-12-04 03:46:32 25 4
gpt4 key购买 nike

看看下面的代码片段。 请记住 @product.name是空的。

代码A

<% if @product.name %>
<div class="bonus">
<h4>Bonus</h4>
<%= @product.name %>
</div>
<% end %>


代码B

<% unless @product.name.blank? %>
<div class="bonus">
<h4>Bonus</h4>
<%= @product.name %>
</div>
<% end %>


根据我对如何使用if的理解和 unless (感谢 this 文章),代码 A 和 B 应该具有完全相同的功能,除了 代码 A 是根据最佳实践执行此操作的正确方法.

问题在于 代码 A 显示生成了 <h4>Bonus</h4>标记而 代码 B 没有!

这怎么可能?

最佳答案

那是因为在 Ruby 中,空字符串是 true

只有 falsenil 的计算结果为 false,在 Ruby 中其他一切都为真,包括空字符串(与 Perl 或 PHP 等语言不同)。

这就是 Rails 引入 blank? 的原因(后来引入了相反的 present?)

来自 Rails 的源代码:

# An object is blank if it's false, empty, or a whitespace string.
# For example, "", " ", +nil+, [], and {} are all blank.
#
# This simplifies:
#
# if address.nil? || address.empty?
#
# ...to:
#
# if address.blank?
def blank?
respond_to?(:empty?) ? empty? : !self
end

# An object is present if it's not <tt>blank?</tt>.
def present?
!blank?
end

关于ruby-on-rails - Unless .blank 之间的问题?而如果,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/8609366/

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