lambdaで作成したProcに名前をつける。

昨日から、

プログラミングGauche

プログラミングGauche

をやり始めた。
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>