BlankSlate

いや、そういう声もあるというだけです

カリー

引数が1個ないやん!

# ふつう
# CSVテーブルを定義
table = CSV::Table.new([
  CSV::Row.new(%w[name age address], %w[hoge 12 hokkaido]),
  CSV::Row.new(%w[name age address], %w[fuga 13 hokkaido]),
  CSV::Row.new(%w[name age address], %w[baka 14 hokkaido]),
  CSV::Row.new(%w[name age address], %w[ahoo 15 hokkaido])
])

# CSVテーブルを表示
puts table
# カリー化と部分適用を使った場合
row =-> (header, content) { CSV::Row.new(header, content) } # 行オブジェクトをラムダ式で定義
row = row.curry                                             # カリー化
row = row.(%w[name age address])                            # ヘッダーを部分適用

# 一行でも書ける
# row =-> (h, c) { CSV::Row.new(h, c) }.curry.(%w[name age address])

# テーブルオブジェクトを定義
table = CSV::Table.new([
  row.(%w[hoge 12 hokkaido]),
  row.(%w[fuga 13 hokkaido]),
  row.(%w[baka 14 hokkaido]),
  row.(%w[ahoo 15 hokkaido])
])

# テーブルを表示
puts table
# 結果はどっちも同じ
name,age,address
hoge,12,hokkaido
fuga,13,hokkaido
baka,14,hokkaido
ahoo,15,hokkaido

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

History