簡単Elixirシリーズ
~ パイプで繋ぐ関数の第2引数へ引き継ぐ方法 ~
この記事は「Elixir Advent Calendar 2022 カレンダー14」22日目の記事です
東京にいるけどfukuokaexのYOSUKEです。
簡単 Elixirシリーズでは小ネタをサクッと書いていこう。というコンセプトで作っていきます。
今回は、Elixirの関数は|>
を利用して第一引数に値を繋いでいく事ができるのですが、たまに第2引数に繋ぎたい時の小技紹介。という小ネタ(そう、この記事はサクッとがコンセプトW)
例えば、Enum.member?
関数があり、第1引数に要素を入れて、第二引数に要素の中と同じ値があるか確認したい要素を入れると true か falseを返す関数があります。
Enum.member?([1,2,3], 1)
true
|>
を活用した記載方法で第2引数に引き継ぎたい場合はどうすればいいか?という小技です。
1 |> Enum.member?([1,2,3])
もちろんこのように記載したらエラーとなります。
[1,2,3] |> Enum.member?(1)
としたら正常に動きます。でも、1をパイプで引き継ぎたいんだーという場合です。
まずは、Enum.member?
関数を member? 変数に束縛します。その時、キャプチャ演算子を利用して、第1引数と第2引数を反対にして束縛してあげます。
iex()> member? = &Enum.member?(&2,&1)
#Function<43.65746770/2 in :erl_eval.expr/5>
iex()> 1 |> member?.([1,2,3])
true
すると、こんな感じでやりたいことが実現できました。