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_in 为 true。因此,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 语句。”
常见问题
在 Ruby 中,if 和 unless 都用于基于条件来控制程序的流程。关键区别在于:
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 !user_logged_in
puts "You're logged out."
end
这读作 “除非未登录”,这可能很难理解。
虽然这是有效的 Ruby,但在这种情况下使用 if 语句通常更清晰。上述代码的等效 if 版本是:
if user_logged_in
puts "You're logged out."
end
但是,当 user_logged_in 为 true 时打印用户已注销是没有意义的。为了保持逻辑一致性,请根据您的意图考虑以下修复之一:
修复 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 更适合。