答案 0 :(得分:47)
我也可以if
加入俱乐部。您将if
与一个条件和可能的else
一起使用,就是这样。如果有多个条件并且cond
语句不够,则使用if
语句,最后,当您想要模式匹配某些数据时使用case
语句。
让我们通过例子解释一下:如果今天下雨或大米,你想要吃苹果,如果没有,你可以使用:
if weather == :raining do
IO.puts "I'm eating apple"
else
IO.puts "I'm eating rice"
end
这是一个有限的世界,所以你想扩展你的选择,因此你会在某些条件下吃掉不同的东西,所以cond
语句是这样的,就像这样:
cond do
weather == :raining and not is_weekend ->
IO.puts "I'm eating apple"
weather == :raining and is_weekend ->
IO.puts "I'm will eat 2 apples!"
weather == :sunny ->
IO.puts "I'm happy!"
weather != :raining and is_sunday ->
IO.puts "I'm eating rice"
true ->
IO.puts "I don't know what I'll eat"
end
最后true
应该在那里,否则会引发异常。
那么case
呢?它用于模式匹配的东西。假设您收到有关天气和星期几的信息作为元组中的消息,您依靠它来做出决定,您可以将您的意图写为:
case { weather, weekday } do
{ :raining, :weekend } ->
IO.puts "I'm will eat 2 apples!"
{ :raining, _ } ->
IO.puts "I'm eating apple"
{ :sunny, _ } ->
IO.puts "I'm happy!"
{ _, :sunday } ->
IO.puts "I'm eating rice"
{ _, _ } ->
IO.puts "I don't know what I'll eat"
end
因此case
为您带来了数据的模式匹配方法,而if
或cond
则没有。
答案 1 :(得分:23)
我的简单回答是:
cond
不接收任何参数,它允许您在每个分支中使用不同的条件。case
收到一个参数,每个分支都与模式匹配对抗参数。