当前位置:  开发笔记 > 后端 > 正文

什么!! 红宝石意味着什么?

如何解决《什么!!红宝石意味着什么?》经验,为你挑选了4个好方法。

只是想知道!!Ruby中有什么.



1> Alex Wayne..:

不是这样的.它用于将值转换为布尔值:

!!nil   #=> false
!!"abc" #=> true
!!false #=> false

它通常是没有必要,因为虽然到Ruby的唯一错误值是使用nilfalse,因此它通常最好让该公约的立场.

把它想象成

!(!some_val)

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


@ DSimon,有时你需要担心大对象,比如在调试期间打印或记录值.
使用它并不是一个坏习惯.Double bang经常用在谓词(以?结尾的方法)中,以返回显式的布尔值.
Alex,你真的不需要担心返回大对象,因为Ruby会返回一个引用,而不是对象的副本.
所以这是一个双重否定?
当您的价值是booelan时,会有所不同.`!! true#=> true`和`true.nil?#=> false`

2> RichH..:

它返回true如果右边的对象不是nilfalse,false如果是nilfalse

def logged_in?   
  !!@current_user
end



3> August Lille..:

!意味着否定布尔状态,!除了双重否定之外,两个s没有什么特别之处.

!true == false
# => true

它通常用于强制方法返回布尔值.它将检测任何类型的真实性,例如字符串,整数和不是,并将其转换为布尔值.

!"wtf"
# => false

!!"wtf"
# => true

一个更真实的用例:

def title
  "I return a string."
end

def title_exists?
  !!title
end

当您想确保返回布尔值时,这非常有用.恕我直言,这是一种毫无意义的,不过,看到这两个if 'some string'if true是完全相同的流动,但有些人觉得有用就明确地返回一个布尔值.



4> Tom..:

请注意,这个习语也存在于其他编程语言中.C没有内在bool类型,因此所有布尔值都被输入,int而规范值为01.采用此示例(为清晰起见,添加了括号):

!(1234) == 0
!(0) == 1
!(!(1234)) == 1

"not-not"语法将任何非零整数转换1为规范布尔值true.

但总的来说,我发现进行合理的比较比使用这种不常见的习语要好得多:

int x = 1234;
if (!!x); // wtf mate
if (x != 0); // obvious

推荐阅读
360691894_8a5c48
这个屌丝很懒,什么也没留下!
DevBox开发工具箱 | 专业的在线开发工具网站    京公网安备 11010802040832号  |  京ICP备19059560号-6
Copyright © 1998 - 2020 DevBox.CN. All Rights Reserved devBox.cn 开发工具箱 版权所有