Ruby unless 语句

Ruby 中的 unless 语句与 if 语句正好相反。它仅在条件为 false 时执行代码块。

以下是一个简单的 unless 语句示例。您可以阅读本教程的其余部分以了解更多信息。

示例

age = 15

unless age >= 18
  puts "You are not old enough to vote."
end

# Output: You are not old enough to vote.

在此,age >= 18 被评估为 false,因此条件失败,unless 块内的代码将被执行。


Unless 语句的语法

unless 语句的语法是:

unless condition
  # Code runs if the condition is false
end

Ruby unless 结合 else

您也可以在 unless 中使用 else 块来处理两种结果 — 条件为 false 时和条件为 true 时。

unless condition
  # Runs if condition is false
else
  # Runs if condition is true
end

我们来看一个例子。

logged_in = true

unless logged_in
  puts "Please log in to continue."
else
  puts "Welcome back!"
end

输出

Welcome back!

在上面的示例中,logged_intrue。因此,unless 条件失败,else 块内的代码将被执行。

注意: unless 语句不支持 elsif。如果您需要检查多个条件,最好使用 if


Ruby unless 修饰符

Ruby 允许您将 unless 写成单行。这称为 unless 修饰符

unless 修饰符的语法是:

statement unless condition

例如,

logged_in = false

puts "Access denied" unless logged_in

以上一行表示:“仅当 logged_in false 时,运行 puts 语句。”


常见问题

unless 和 if 语句有什么区别?

在 Ruby 中,ifunless 都用于基于条件来控制程序的流程。关键区别在于:

  • if 在条件为 true 时运行代码。
  • unless 在条件为 false 时运行代码。

if 语句示例

is_logged_in = true

if is_logged_in
  puts "Welcome back!"
end

# Output: Welcome back!

unless 语句示例

is_logged_in = false

unless is_logged_in
  puts "Please log in."
end

# Output: Please log in.
我们何时不应使用 unless 语句?

虽然 unless 在很多情况下可以提高可读性,但它有时会变得令人困惑(尤其是与双重否定一起使用时)。例如:

unless !user_logged_in
  puts "You're logged out."
end

这读作 “除非未登录”,这可能很难理解。

虽然这是有效的 Ruby,但在这种情况下使用 if 语句通常更清晰。上述代码的等效 if 版本是:

if user_logged_in
  puts "You're logged out."
end

但是,当 user_logged_intrue 时打印用户已注销是没有意义的。为了保持逻辑一致性,请根据您的意图考虑以下修复之一:

修复 1:纠正打印的消息

告知用户他们已登录

if user_logged_in
  puts "You're logged in."
end

修复 2:更改变量名“user_logged_out”

保留原始消息,但使条件匹配

if user_logged_out
  puts "You're logged out."
end

提示: 如果条件包含 not (!),这通常表明 if 可能比 unless 更适合。

你觉得这篇文章有帮助吗?

我们的高级学习平台,凭借十多年的经验和数千条反馈创建。

以前所未有的方式学习和提高您的编程技能。

试用 Programiz PRO
  • 交互式课程
  • 证书
  • AI 帮助
  • 2000+ 挑战