[#139] ruby 0.97 available — matz@... (Yukihiro Matsumoto)
まつもと ゆきひろ@トヨタケーラムです.
1 message
1996/02/13
[#145] Re: The black face. — matz@... (Yukihiro Matsumoto)
まつもと ゆきひろ@トヨタケーラムです.
1 message
1996/02/14
[#182] Re: DOS port — Kazuhiko Iwama <iwama@...>
■ [ruby-list:178] Re: DOS port
1 message
1996/02/20
[#184] Re: DOS port — Kazuhiko Iwama <iwama@...>
■ [ruby-list:181] Re: DOS port
1 message
1996/02/20
[#185] Re: DOS port — Kazuhiko Iwama <iwama@...>
■ [ruby-list:183] Re: DOS port
1 message
1996/02/20
[#196] Re: DOS port — Kazuhiko Iwama <iwama@...>
■ [ruby-list:183] Re: DOS port
1 message
1996/02/26
[#198] Re: DOS port — Kazuhiko Iwama <iwama@...>
■ [ruby-list:197] Re: DOS port
1 message
1996/02/26
[#201] Re: ruby for JPower — matz@... (Yukihiro Matsumoto)
まつもと ゆきひろ@トヨタケーラムです.
1 message
1996/02/26
[ruby-list:206] TUTORIAL - procedure object
From:
matz@... (Yukihiro Matsumoto)
Date:
1996-02-27 10:33:16 UTC
List:
ruby-list #206
まつもと ゆきひろ@トヨタケーラムです.
というわけで,在庫処分です.手続きオブジェクトはlispにおける
closureのようなものです.
--
手続きオブジェクト
プログラムを書いていると手続きを引数として渡したい場合が時々
ある.例えば,シグナルの処理などはそうだ.外側からあるシグナ
ルが来た場合に対処するのに,その時に実行する手続きを指定でき
れば良いだろう.
rubyではシグナルに対する処理を指定するのにはtrapというメソッ
ドを使う.
ruby> trap "SIGUSR1", 'print "foobar\n"'
nil
ruby> kill "SIGUSR1", $$
foobar
1
ここでは,シグナルが来た場合の手続きを文字列で指定している.
rubyがインタプリタならでは手段である.しかし,いちいち文字列
を介さなくても,手続きをそのままオブジェクト化する方法もある.
ruby> trap "SIGUSR1", proc{print "foobar\n"}
nil
ruby> kill "SIGUSR1", $$
foobar
1
procというのは{}で括られた部分を「手続きオブジェクト」と呼ぶ
オブジェクトにするメソッドである.手続きを実行するためには
callというメソッドを使う.
ruby> proc = proc{print "foo\n"}
#<Proc>
ruby> proc.call
foo
nil
手続きオブジェクトはハンドラやコールバックとしてCにおける関
数ポインタのように使える.いちいち関数やメソッドを定義する必
要が無い(名前も考えなくて良い)ので,手軽といえば手軽かも知れ
ない.