LoginSignup
13
0

More than 1 year has passed since last update.

簡単Elixirシリーズ ~ パイプで繋ぐ関数の第2引数へ引き継ぐ方法 ~

Last updated at Posted at 2022-12-21

簡単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

すると、こんな感じでやりたいことが実現できました。

13
0
0

Register as a new user and use Qiita more conveniently

  1. You get articles that match your needs
  2. You can efficiently read back useful information
  3. You can use dark theme
What you can do with signing up
13
0