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
, break
或 raise
,则该类型不会被考虑在 if
语句结束时。
if some_condition
e = 1
else
e = "hello"
# e : String
return
end
# e : Int32