首页
学习
活动
专区
工具
TVP
发布
社区首页 >问答首页 >什么会!!用红宝石表示的意思?

什么会!!用红宝石表示的意思?
EN

Stack Overflow用户
提问于 2009-02-07 21:53:47
回答 6查看 18K关注 0票数 138

只是想知道Ruby语言中的!!是什么。

EN

回答 6

Stack Overflow用户

回答已采纳

发布于 2009-02-07 22:05:29

不是不是。

它用于将值转换为布尔值:

代码语言:javascript
复制
!!nil   #=> false
!!"abc" #=> true
!!false #=> false

这通常是不必要的,因为Ruby的唯一错误值是nilfalse,所以通常最好让这个约定成立。

把它想象成

代码语言:javascript
复制
!(!some_val)

它的一个合法用途是防止大量数据被返回。例如,您可能不希望在has_image?方法中返回3MB的图像数据,或者不希望在logged_in?方法中返回整个user对象。使用!!将这些对象转换为简单的true/false

票数 165
EN

Stack Overflow用户

发布于 2009-02-07 22:06:16

如果右侧的对象既不是nil也不是false,则返回true;如果是nilfalse,则返回false

代码语言:javascript
复制
def logged_in?   
  !!@current_user
end
票数 31
EN

Stack Overflow用户

发布于 2009-02-08 18:10:29

!的意思是否定布尔状态,两个!s没有什么特别之处,只是一个双重否定。

代码语言:javascript
复制
!true == false
# => true

它通常用于强制一个方法返回一个布尔值。它将检测任何类型的真值,如字符串、整数等等,并将其转换为布尔值。

代码语言:javascript
复制
!"wtf"
# => false

!!"wtf"
# => true

一个更真实的用例:

代码语言:javascript
复制
def title
  "I return a string."
end

def title_exists?
  !!title
end

当您想要确保返回一个布尔值时,这是很有用的。虽然看到if 'some string'if true是完全相同的流,但是有些人发现显式返回布尔值是有用的。

票数 14
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/524658

复制
相关文章

相似问题

领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档