跳至内容

if

如果 if 的条件为 真值,则执行给定的分支。 否则,如果存在 else 分支,则执行该分支。

a = 1
if a > 0
  a = 10
end
a # => 10

b = 1
if b > 2
  b = 10
else
  b = 20
end
b # => 20

要编写一系列 if-else-if,请使用 elsif

if some_condition
  do_something
elsif some_other_condition
  do_something_else
else
  do_that
end

if 语句之后,变量的类型取决于两个分支中使用的表达式的类型。

a = 1
if some_condition
  a = "hello"
else
  a = true
end
# a : String | Bool

b = 1
if some_condition
  b = "hello"
end
# b : Int32 | String

if some_condition
  c = 1
else
  c = "hello"
end
# c : Int32 | String

if some_condition
  d = 1
end
# d : Int32 | Nil

请注意,如果在一个分支中声明了一个变量,但在另一个分支中没有声明,那么在 if 语句结束时,该变量也将包含 Nil 类型。

if 分支内部,变量的类型是它在该分支中被赋值的类型,或者如果它没有被重新赋值,则为它在分支之前拥有的类型。

a = 1
if some_condition
  a = "hello"
  # a : String
  a.size
end
# a : String | Int32

也就是说,变量的类型是最后赋值给它的表达式(s)的类型。

如果其中一个分支在 if 语句结束之前没有执行到结束,例如 return, next, breakraise,则该类型不会被考虑在 if 语句结束时。

if some_condition
  e = 1
else
  e = "hello"
  # e : String
  return
end
# e : Int32