タグ

curryとto_procに関するishideoのブックマーク (2)

  • Procを制する者がRubyを制す(嘘)

    RubyのProcの説明は巷に溢れているから今更感があるけどここ数回Procを使ったネタを書いていたらProcがかわいくなっちゃってもっとみんなにもProcのこと知ってもらいたいという欲求が生まれてきたからProcについての基的なことを僕なりのやり方でここに書くよ。長いよ。 Rubyの関数(メソッド) Rubyにおいて関数(メソッド)はファーストクラス(オブジェクト)ではありません。つまり文字列や数字や配列などの他のオブジェクトとは異なって、Rubyではそれを直接変数に代入したり、他の関数に渡したりすることはできません。 def square(n) n * n end sq = square # squareメソッドを変数sqに代入してみる # ~> -:1:in `square': wrong number of arguments (0 for 1) (ArgumentError)

    Procを制する者がRubyを制す(嘘)
  • 関数プログラミングっぽくmapに2引数関数をカーリー化して渡す - 城陽人の本棚

    rubyで1引数関数をmapに渡す場合は、こんなかんじでメソッドのシンボルをProcオブジェクトとして渡せて関数プログラミングっぽい書き方ができるんだけど、 irb > ('a'..'c').map &:upcase => ["A", "B", "C"] 2引数になるとどう書けばよいんやろうと思ってたのだけど、パーフェクトRuby読んでたら、9.3章MethodオブジェクトとProcオブジェクトのところにこんな書き方が載ってた。 irb > (0..10).map &2.method(:*).to_proc => [0, 2, 4, 6, 8, 10, 12, 14, 16, 18, 20] ぜんぜん直感的じゃないけど、数字の2のインスタンスから乗算メソッド*のMethodオブジェクトを取得して、Procオブジェクトに変換して渡してる。数字の2はMehtodオブジェクトのレシーバとして束縛

    関数プログラミングっぽくmapに2引数関数をカーリー化して渡す - 城陽人の本棚
  • 1