35

在 Elixir 编程语言中,有两个相似的结构condcase. 两者都类似于来自其他语言的switchorselect语句

两者condcase此页面上进行了描述

4

2 回答 2

64

让我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为您带来了数据的模式匹配方法,而您没有使用ifor cond

于 2014-01-12T20:25:19.030 回答
37

我的简单回答是:

  • cond不接收任何参数,它允许您在每个分支中使用不同的条件。
  • case接收一个参数,并且每个分支都与该参数进行模式匹配
于 2015-11-25T11:44:38.093 回答