lambdaで作成したProcに名前をつける。
昨日から、
- 作者: Kahuaプロジェクト,川合史朗
- 出版社/メーカー: オライリージャパン
- 発売日: 2008/03/14
- メディア: 大型本
- 購入: 22人 クリック: 713回
- この商品を含むブログ (244件) を見る
「lispの概念をしっかり身に着けることで、Rubyに対する理解も深まるはず」という作戦でやっている。今のところ順調。
(define (square-sum a b)(+ (* a a)(* b b)))
は
(define square-sum (lambda (a b) (+ (* a a) (* b b))))
の簡略表記に過ぎないという内容の記載(p62)を読んで、rubyでもlambdaで作った後メソッド名に束縛してみようとしてみたのが下記。全然自信はないが、そのように見えるから出来てるって言って良いはず。
- 無名関数を作成し、anon_mに格納しcallで呼んでみる。
irb(main):021:0> anon_m=lambda {|x| puts "Hi #{x}!!" } => #<Proc:0xb80704b4@(irb):21> irb(main):022:0> anon_m.call("t9md") Hi t9md!! => nil
- anon_m.call以外の一般的なメソッド名で呼べるように名前をhiというmethod名を
つけてみる。※これはdefで定義するmethodとの違いがあるのか、ないのか、分からん。
private methodなので__send__で呼ぶ。
irb(main):023:0> self.class.__send__(:define_method, :hi, anon_m) => #<Proc:0xb80704b4@(irb):21> irb(main):025:0> hi("t9md") Hi t9md!! => nil irb(main):027:0> anon_m.object_id => -603749838 irb(main):029:0> anon_m=nil => nil irb(main):030:0> hi('t9md') Hi t9md!! => nil irb(main):031:0>