【问题标题】:What does the "!!" symbol mean in Ruby?“!!”是什么意思Ruby中的符号是什么意思?
【发布时间】:2011-04-18 19:08:11
【问题描述】:
def test
!!session[:test]
end

!! - 这是做什么的?我们可以删除它并仍然假设它会以相同的方式工作吗?

【问题讨论】:

标签: ruby


【解决方案1】:

那就是double bang (or bang bang)

它本身并不是一个真正的运算符。它实际上是两个 ! 运算符在一起......执行双重否定。它用于确保您使用的是布尔值。

【讨论】:

  • 现在我有一种强烈的冲动要看杀死比尔卷。 1 再一次……叹息。
  • 提醒我“我只想砰砰砰”youtube.com/watch?v=vfeHkRRcdWk
  • @David 离题,但您在个人资料中邀请了联系人,但是您用于 SO 的电子邮件地址不公开,因此如果您希望人们能够联系到您,则需要包含您的网站您个人资料中的地址或其他详细信息。
  • @mikej,这是一个很好的观点。刚刚在其中编辑了一个电子邮件地址。
【解决方案2】:

第一个! 将其操作数强制为布尔值,然后取反。第二个! 否定否定值。总和效果是将操作数强制为布尔类型。因此,如果您更改它,那么该方法将不再返回布尔值,它将返回该符号的散列中的任何内容。如果你删除它,什么都不会改变,但使用!! 的好处是你不能滥用方法调用从会话中获取对象。

【讨论】:

  • 你为什么不直接使用 session[:test].present?
【解决方案3】:

为了解决您的第二个问题,如果您删除双重否定,您的方法将发生微妙的变化,因为您将返回对象而不是 TrueClass 或 FalseClass。

!!除非您明确需要布尔值(例如,如果您正在构建 API),否则通常不赞成。由于 Ruby 将任何非 nil 和非 false 值评估为真值,因此通常只返回有问题的对象以便调用其方法是安全的。

【讨论】:

    猜你喜欢
    • 2010-09-29
    • 1970-01-01
    • 2016-08-17
    • 2020-06-29
    • 2015-02-13
    • 2011-04-07
    • 2014-05-11
    • 1970-01-01
    • 1970-01-01
    相关资源
    最近更新 更多