ZetCode

Ruby NOT 关键字

最后修改日期:2025 年 4 月 27 日

本教程讲解如何使用 Ruby 的 not 关键字进行逻辑否定。not 运算符会反转表达式中的布尔值。

not 关键字是一个逻辑运算符,它返回其操作数的相反值。它的优先级低于 !,但更具可读性。

not 在 Ruby 中可以处理真值和假值。它在取反之前会先将操作数转换为布尔值。通常需要使用括号来提高清晰度。

基本 NOT 示例

这个简单的示例展示了 not 运算符的基本行为。它会反转布尔值。

basic_not.rb
flag = true
puts not(flag)  # Outputs false

flag = false
puts not(flag)  # Outputs true

not 运算符在接收 true 时返回 false,反之亦然。使用括号可以使表达式更清晰。

带真值的 NOT

在 Ruby 中,除了 true 之外,许多值都被认为是真值。not 运算符会一致地处理这些值。

truthy_values.rb
puts not("hello")  # false
puts not(42)       # false
puts not([])       # false
puts not(nil)      # true
puts not(false)    # true

在 Ruby 中,只有 nilfalse 被评估为假值。所有其他值在转换为布尔值时都为 true

在条件语句中使用 NOT

not 运算符经常用于条件表达式。本示例展示了它如何控制程序流程。

conditional.rb
logged_in = false

if not logged_in
  puts "Please log in"
else
  puts "Welcome back"
end

条件判断用户登录。在这种情况下,使用 not 比使用 ! 更具可读性。

带比较运算符的 NOT

not 与比较运算符结合使用需要括号。本示例演示了正确的语法。

comparison.rb
age = 17

if not (age >= 18)
  puts "You're not old enough"
end

如果不使用括号,Ruby 会由于运算符优先级而以不同的方式解析此语句。not 会应用于整个比较。

NOT 与 Bang (!) 运算符

本示例将 not! 进行对比,以展示它们在优先级和行为上的差异。

not_vs_bang.rb
x = true
y = false

puts !x && y    # false (&& evaluated first)
puts not(x && y) # true (not evaluated first)

! 的优先级高于 &&,而 not 的优先级较低。这会影响求值顺序。

在方法定义中使用 NOT

方法可以使用 not 返回否定结果。本示例展示了一个验证方法。

method_definition.rb
def invalid_email?(email)
  not (email.include?('@') && email.end_with?('.com'))
end

puts invalid_email?('test@example.com') # false
puts invalid_email?('bad_email')        # true

该方法对于无效电子邮件返回 truenot 清晰地表达了与有效电子邮件标准相反的条件。

带 Nil 检查的 NOT

not 运算符非常适合进行 nil 检查,可提供可读的代码。本示例演示了 nil 的处理。

nil_check.rb
user = nil

if not user
  puts "User not found"
end

# Alternative with safe navigation
user&.name || puts("User not found")

not 运算符可以清晰地检查 nil 或 false 值。安全导航运算符提供了另一种方法。

来源

Ruby 关键字文档

本教程通过实际示例涵盖了 Ruby 的 not 关键字,展示了布尔否定、条件判断和比较。

作者

我的名字是 Jan Bodnar,我是一名热情的程序员,拥有丰富的编程经验。我自 2007 年以来一直在撰写编程文章。迄今为止,我已撰写了 1,400 多篇文章和 8 本电子书。我在编程教学方面拥有十多年的经验。

列出 所有 Ruby 教程