LoginSignup
4
0

More than 3 years have passed since last update.

なんかよくわからないのですが、ある日突然カリー化に興味を持ってしまいました🍛

カリー化とは

カリー化 (currying, カリー化された=curried) とは、複数の引数をとる関数を、引数が「もとの関数の最初の引数」で戻り値が「もとの関数の残りの引数を取り結果を返す関数」であるような関数にすること(あるいはその関数のこと)である。
カリー化 - Wikipediaより

引数が複数個あるのメソッドを「1引数のメソッドを返すメソッド」に変換してくれます。

def magic_spice(a, b, c)
  a + b + c
end

> magic_spice(1, 2, 3)
=> 6
> magic_spice(1, 2)
ArgumentError: wrong number of arguments (given 2, expected 3)

引数が3つのメソッドに対して、引数を2つしか渡さないとこうなるのは当たり前ですよね。

ではこのメソッドをカリー化してみます。
Rubyでカリー化する場合は Method#curry を使います。

instance method Method#curry

十分な数の引数が与 えられると、元の Proc に引数を渡し て実行し、結果を返します。引数 の個数が足りないときは、部分適用したカリー化 Proc を返します。

# まずはprocに。
proc_magic_spice = self.method(:magic_spice).curry
=> #<Proc:0x00007fb642009ad8 (lambda)>

proc1 = proc_magic_spice.call(1)
=> #<Proc:0x00007fb645083858 (lambda)>

proc2 = proc1.call(2)
=> #<Proc:0x00007fb64300f090 (lambda)>

# ここでmagic_spiceメソッドの3つめの引数を渡すと…
proc2.call(3)
=> 6

わーい!できたー😄

ただ、Rubyでカリー化して嬉しい時ってどんな時だろう・・・

4
0
3

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
4
0