2017-05-12 10 views
2

私は、必須のブロック区切り記号のようなエリクサーに "do/end"表記を使用しています。 (換言すれば、doは、Cのような言語の{のようなものであり、end}のようなものです)。エリクシールとハスケルの "do"表記

これは何が起こっているのか正確な説明ですか?あるいは、Haskell do表記のように、命令的なコーディングを可能にするモナドの構文的な砂糖を構成していますか?

答えて

6

はい、いいえ。 do/endは、キーワードリストの構文上の便利な機能です。

if式は以前に書かれた可能性があります。誰かが見たいと思うものは、次のようなものです。

if predicate do 
    true_branch 
else 
    false_branch 
end 

これはキーワードリストを使用して記述することもできます。以下は全く同じです。 do/endの表記を使用して

if predicate, do: true_branch, else: false_branch 

は、コードのブロックを書くとき、私たちは、冗長性を削除することができます。以下の2つのif式は等価です。

if predicate do 
    a = foo() 
    bar(a) 
end 

if predicate, do: (
    a = foo() 
    bar(a) 
) 

これは関数の定義でも同じです。 def/2マクロもキーワードリストを使用します。あなたはあなたがgetting startedガイドではこれについての詳細を読むことができ、次の

def foo, do: 5 

のような関数を定義することができます意味。

関連する問題