我发现自己一再寻找nil?差异的明确定义nil?blank?empty? 在Ruby on Rails中。 这是我最接近的:

  • blank? 对象是false,空或空白字符串。 例如, """ "nil[]{}为空。

  • nil? 对象是NilClass的实例。

  • empty? 对象是特定于类的,并且定义因类而异。 如果字符串没有字符,则该字符串为空;如果字符串不包含任何项目,则该字符串为空。

有什么遗漏,或者可以做出更严格的比较吗?


#1楼

关于any?一点只是一点点注意事项any? 建议:他是对的,它通常相当于!empty? 。 但是, any? 将返回true到只是空格的字符串(ala " " )。

当然,请参阅上面的1.9评论。


#2楼

一个特例是在尝试评估布尔值是否为零时:

false.present? == false
false.blank? == true
false.nil? == false

在这种情况下,建议是使用.nil?


#3楼

我用所有案例制作了这个有用的表格:

blank?present? 由Rails提供。


#4楼

只需扩展朱利安的表格:

参考: 空?空白?无?傻傻分不清楚


#5楼

nil? 是一个标准的Ruby方法,可以在所有对象上调用,如果对象为nil则返回true

b = nil
b.nil? # => true

empty? 是一个标准的Ruby方法,可以在一些对象(如字符串,数组和哈希)上调用,如果这些对象不包含任何元素,则返回true

a = []
a.empty? # => trueb = ["2","4"]
b.empty? # => false

empty? 无法在nil对象上调用。

blank? 是一个Rails方法,可以在nil对象和空对象上调用。


#6楼

其他人都很好地解释了有什么区别。

我想在Ruby On Rails中添加,最好使用obj.blank? 还是obj.present? 而不是obj.nil? 还是obj.empty?

obj.blank? 处理所有类型的nil''[] {}并返回true ,如果值不可用,并返回false如果值可用在任何类型的对象。


#7楼

Rails 4

替换@ corban-brook的'Array gotcha :blank?' 用于检查数组是否仅包含空值并且可以视为空白? 真正:

[ nil, '' ].all? &:blank? == true

一个人也可以这样做:

[nil, '', "", " ",'  '].reject(&:blank?).blank? == true

#8楼

快速提示: !obj.blank? == obj.present? !obj.blank? == obj.present?

在一些表达中,可以方便/更容易在眼睛上


#9楼

nil? 可以在任何对象上使用。 它确定对象是否具有任何值,包括“空白”值。

例如:

example = nil
example.nil?  # true"".nil?  # false

基本上nil? 如果对象实际上等于'nil',则只会返回true。

empty? 仅在被视为集合的对象上调用。 这包括字符串(字符集合),哈希(键/值对的集合)和数组(任意对象的集合)之类的东西。 empty? 如果集合中没有项目,则返回true。

例如:

"".empty? # true
"hi".empty?   # false
{}.empty?  # true
{"" => ""}.empty?   # false
[].empty?   # true
[nil].empty?  # falsenil.empty?  # NoMethodError: undefined method `empty?' for nil:NilClass

请注意empty? 无法在nil对象上调用,因为nil对象不是集合,它会引发异常。

另请注意,即使集合中的项目为空白,也不表示集合为空。

blank? 基本上是nil?的组合nil? empty? 它对于检查您认为是集合的对象很有用,但也可能是nil。


#10楼

exists? 方法可用于检查数据库中是否存在数据。 它返回布尔值truefalse


#11楼

  • 一切都是nil?blank?
  • 一切都是empty?blank?
  • 没有什么是empty? nil?
  • 没有什么是nil?empty?

tl; dr - 只用blank?present? 除非你想区分""" "


#12楼

一个区别是.nil?.empty? 是编程语言Ruby提供的方法,而.blank? 是Web开发框架Rails 添加的东西。


#13楼

不要忘记any? 这通常是!empty? 。 在Rails我通常在一个声明中与最终检查的东西存在if somethingunless something再使用blank? 在需要的地方,因为它似乎无处不在。


#14楼

.nil? 可以在任何对象上使用,如果对象为零,则为true。

.empty? 可用于字符串,数组和散列,并在以下情况下返回true:

  • 字符串长度== 0
  • 数组长度== 0
  • 哈希长度== 0

.empty? 在nil的东西上会抛出一个NoMethodError

那是.blank? 来自。它由Rails实现,可以在任何对象上运行,也可以像.empty?一样工作.empty? 在字符串,数组和散列上。

nil.blank? == true
false.blank? == true
[].blank? == true
{}.blank? == true
"".blank? == true
5.blank? == false
0.blank? == false

.blank? 还对非空的字符串求值为true,但只包含空格:

"  ".blank? == true
"  ".empty? == false

Rails还提供 .present? ,它返回.blank?的否定.blank?

数组问题: blank? 即使数组的所有元素都是空白,也将返回false 。 要确定这种情况下的空白,请使用all? blank? , 例如:

[ nil, '' ].blank? == false
[ nil, '' ].all? &:blank? == true

在Ruby on Rails中对nil v。空v。空白的简要解释相关推荐

  1. 如何在Ruby on Rails中获得当前的绝对URL?

    如何在Ruby on Rails视图中获取当前的绝对URL ? request.request_uri仅返回相对URL. #1楼 url_for(params) 您可以轻松添加一些新参数: url_f ...

  2. ruby on rails 中使用boot strap(先存起来,还没试过)

    1.首先安装  gem 'twitter-bootstrap-rails' ,运行bundle install 2.初始化 rails generate bootstrap:install less  ...

  3. 新手安装ruby on rails(ror)的成功必备手册

    2019独角兽企业重金招聘Python工程师标准>>> 如何快速正确的安装 Ruby, Rails 运行环境 每一位使用windows系统来进行ROR开发项目的都是这个世界上折翼的天 ...

  4. Ruby on Rails 终极部署方案 nginx+mina+puma

    搭建工具介绍 Ruby on Rails作为一款十分优秀的web开发框架,在当前web领域中慢慢占据了越来越重要,秉承rails快速开发的特点,很多快速部署rails的方案也越来越多.这篇文章中所选的 ...

  5. Ruby on Rails 和 J2EE:两者能否共存?

    Ruby on Rails 和 J2EE:两者能否共存? 两个 Web 应用程序框架的比较 文档选项 <tr valign="top"><td width=&qu ...

  6. 如何从Hash中删除一个键并获取Ruby / Rails中的剩余哈希?

    要向Hash添加新对,我会: {:a => 1, :b => 2}.merge!({:c => 3}) #=> {:a => 1, :b => 2, :c => ...

  7. 如何在Ruby on Rails迁移中重命名数据库列?

    我错误地将列命名为hased_password而不是hashed_password . 如何使用迁移重命名此列来更新数据库架构? #1楼 如果当前数据对您不重要,您可以使用以下方法删除原始迁移: ra ...

  8. Ruby on Rails路径穿越与任意文件读取漏洞分析(CVE-2019-5418)

    Ruby on Rails是一个 Web 应用程序框架,是一个相对较新的 Web 应用程序框架,构建在 Ruby 语言之上.它被宣传为现有企业框架的一个替代,而它的目标,就是让 Web 开发方面的生活 ...

  9. Ubuntu 12.04搭建Ruby on Rails开发环境

    我也是刚刚从Win平台转到linux平台下,历经周折终于搭建完成了ubuntu下的ROR 环境,这个教程是在 http://www.cnblogs.com/keen-allan/archive/201 ...

最新文章

  1. 线段树练习 3P3372 【模板】线段树 1
  2. 快速配置Windows 2003平台下实现 IIS(WEB)站点的安全(SSL加密技术!)
  3. 三十一、深入Python中的正则表达式
  4. Taro+react开发(23)--componentWillReceiveProps
  5. matlab神经网络 误差曲线,神经网络如何输出各层训练误差曲线?
  6. 【Hisi系列】之软件平台开发(MPP相关)
  7. 静态页面 调用php数据,静态html页面如何更新点击数
  8. 电子相册系统(七)查看原图
  9. 贝索斯:为什么我们要选择更难的事情去做? |【经纬低调分享】
  10. 数学建模学习之模糊评价法
  11. office 利用宏 给全文追加拼音
  12. 记录某次利用word邮件功能 由excel数据中批量生成奖状 遇到的问题及解决措施
  13. 腾讯坐标系转化成百度坐标系
  14. matlab输入一个3位整数,matlab随机产生一个3位整数,将它的十位数变为0。例如,输入738则输出708。...
  15. 【刘文彬】【源码解读】EOS测试插件:txn_test_gen_plugin.cpp
  16. Netty面试题和答案
  17. matplotlib修改背景颜色和插入背景图片
  18. [AHK]通达信联动到同花顺下单
  19. 仿iphone顶部状态栏_无需第三方APP,苹果iPhone手机屏幕录制的方法
  20. aws-s3-使用boto3根据路径和间隔时间进行清理删除启用版本控制的文件

热门文章

  1. git 2015-5-26
  2. VMware虚拟化技术培训(6) 虚拟网络和虚拟存储
  3. 使用vs2010自带的数据库的方法
  4. class layout basic 2
  5. Python3.x:pip install pymssql安装时出错
  6. POJ - 3190
  7. liunx 下压缩解压zip文件
  8. 自定义ActionBar
  9. 【mysql乱码】解决php中向mysql插入中文数据乱码的问题
  10. 分分钟搞定阿里云私有Docke镜像仓库的搭建