2017-10-17 9 views
1

の、1は、パターンマッチングの枝に条件を追加することができます。たとえば、OCamlの中で:どの場合にマッチに条件を追加する...関数型言語で

let value = match something with 
| OneThing -> "1" 
| Another when condition -> "2" 
| _ -> "3" 

行う方法これはエルメ?私はwhenifを試しましたが、何も働かなかった。

答えて

5

Elmにはパターンマッチング内に条件文がありません。おそらく、言語設計者が構文を小さく単純に保つ傾向があるためです。

あなたができる最善のは、このようなものです:

let 
    value = 
     case something of 
      OneThing -> 
       "1" 

      Another -> 
       if condition then 
        "2" 
       else 
        ... 

      _ -> 
       "3" 
3

case支店内ifを使用する代わりに、あなたの代わりに次のようになります条件を含むタプル照合する場合がありますこれは、

let 
    value = 
     case (something, condition) of 
      (OneThing, _) -> 
       "1" 

      (Another, True) -> 
       "2" 

      _ -> 
       "3" 
+0

このソリューションは、ブランチに1つの条件がある場合にのみ有効です。 2つの異なる条件が必要な場合、それはもはや不可能です。 – Boiethios

+0

@Boiethios、もしあなたが複数の条件を導入しているなら、それは確かに毛がかってしまいます。その場合は 'if' /' else'に切り替えることをお勧めします。しかし、私は2つの異なる条件を持つことについて不可能なことは何もないと考えていません。あなたがマッチしているタプルに別の要素を追加するだけです。 https://ellie-app.com/mkqNvychwa1/0を参照してください。あなたの意味が分からない場合に教えてください – bdukes

+0

あなたは正しいです、私はそれについて考えなかったのです。しかし、あなたが言うように、このメソッドは条件を追加しながらコードをすばやく混乱させます。私の学習プロジェクトでは、「if」...「else」に切り替えました。 elmチームからのこの選択は、読みにくいコードを書くことを強いるため、言語を「シンプル」なIMOにしないでください(例:https://gitlab.com/snippets/1679916#L73)おそらく私は自分のリポジトリにこれについて投稿します。 – Boiethios

関連する問題