Edited at

Elixir1.3でwithスペシャルフォームに追加されそうな機能

More than 3 years have passed since last update.


Elixir1.3でwithスペシャルフォームに追加されそうな機能

@hayabusa333 さんがElixir MeetUp #2 in Drecom にて発表されたスライドの中でwithの拡張が気になったので調べました。(Slideshareのコメント欄汚してすみません…あそこ書き方が分かんないです)


withにelse句が追加されそう

https://github.com/elixir-lang/elixir/issues/4085

caseっぽくelseが書けます。

iex(76)> v=1; with  1 <- v, do: v, else: (2 -> 20; 3 -> 300; _ -> "?")

1
iex(77)> v=2; with 1 <- v, do: v, else: (2 -> 20; 3 -> 300; _ -> "?")
20
iex(78)> v=3; with 1 <- v, do: v, else: (2 -> 20; 3 -> 300; _ -> "?")
300
iex(79)> v=4; with 1 <- v, do: v, else: (2 -> 20; 3 -> 300; _ -> "?")
"?"


withにガードが追加されそう

https://github.com/elixir-lang/elixir/issues/4015

forへのガード追加に伴い、一貫性の為にという感じの機能追加です。あまり意味はなさげ。

iex(75)> v = 1; with (x when is_integer(x) <- v), do: x, else: (_ -> :error)

1
iex(76)> v = "!"; with (x when is_integer(x) <- v), do: x, else: (_ -> :error)
:error


余談ですが、現時点で唯一のElixir和書と名高いアランビックの錬金術士買いました。薄い(薄くない)本購入は初体験です。