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
更适合。