太变态了
# File activesupport/lib/active_support/core_ext/object/blank.rb, line 12
12: def blank?
13: respond_to?(:empty?) ? empty? : !self
14: end
额。。。。
我掉过类似的陷阱
irb
=> true
ree-1.8.7-2011.03 :005 > a = false
=> false
ree-1.8.7-2011.03 :006 > a ||= true
请问大家 a 是什么
#3 楼 @smoothdvd 看到频繁用.nil?
的就知道用 Ruby 不超过半年...
正常的写法就是:
if condition
else
end
如果是 rails 表单传过来的值,可能有空字符串或换行:
if params[:xxx].present?
else
end
也有需要用.nil?的时候,就是要和 false 做特别区分的:
# 类似5楼的例子
enabled = true if enabled.nil?
#21 楼 @tylerlong 同感。
#18 楼 @quakewang 我也不懂楼主的需求,我觉得楼主需要的就是个 defined? 函数来判断一个变量是否被定义了。
其实楼主不在乎那个类型是不是 boolean 类型的,只是在乎那个变量名代表的形参是否在函数被调用时被赋值了。否则的话,直接 if condition 就可以了。我觉得 defined? 函数可以解决楼主的问题,当然,更好的方法是帮那个形参设置默认值。不懂我这样的表述符不符合楼主遇到的问题?
还是同意 hooopo 的,实际开发的时候,基本上用 blank? 和 present? 就 ok 了。 一切你认为应该是“有值”的,皆为 present 的,反之就用 blank?。 这两个配合的另外好处是少用 ! 否定号,这样脑子不用绕弯子了。
与此类似的有 js 中常被认为 糟粕 的东西,也有一定道理。比如 空数组等都是 false。
可以为 数组添加一个 blank? 方法
class Array
def blank?
self==[]
end
end
[].blank? 返回就是 true 同样可以添加很多方法:
{}.blank?
nil.blank?
0.blank?
"".blank?