[#38323] [1.8.7][1.9.1][tk] 自前実装の拡張 widget を使いたい場合 — oshida@...

押田です。

22 messages 2009/04/24
[#38331] Re: [1.8.7][1.9.1][tk] 自前実装の拡張 widget を使いたい場合 — Hidetoshi NAGAI <nagai@...> 2009/04/26

永井@知能.九工大です.

[#38339] Re: [1.8.7][1.9.1][tk] 自前実装の拡張 widget を使いたい場合 — oshida@... 2009/04/27

押田です。

[#38340] Re: [1.8.7][1.9.1][tk] 自前実装の拡張 widget を使いたい場合 — Hidetoshi NAGAI <nagai@...> 2009/04/27

永井@知能.九工大です.

[#38697] Re: [1.8.7][1.9.1][tk] 自前実装の拡張 widget を使いたい場合 — Hidetoshi NAGAI <nagai@...> 2009/06/21

永井@知能.九工大です.

[#38711] Re: [1.8.7][1.9.1][tk] 自前実装の拡張 widget を使いたい場合 — oshida@... 2009/06/24

押田です。

[#38723] Re: [1.8.7][1.9.1][tk] 自前実装の拡張 widget を使いたい場合 — Hidetoshi NAGAI <nagai@...> 2009/07/01

永井@知能.九工大です.

[#38743] Re: [1.8.7][1.9.1][tk] 自前実装の拡張 widget を使いたい場合 — oshida@... 2009/07/07

押田です。

[#38747] Re: [1.8.7][1.9.1][tk] 自前実装の拡張 widget を使いたい場合 — Hidetoshi NAGAI <nagai@...> 2009/07/08

永井@知能.九工大です.

[#38748] Re: [1.8.7][1.9.1][tk] 自前実装の拡張 widget を使いたい場合 — oshida@... 2009/07/08

押田です。

[#38749] Re: [1.8.7][1.9.1][tk] 自前実装の拡張 widget を使いたい場合 — Hidetoshi NAGAI <nagai@...> 2009/07/08

永井@知能.九工大です.

[ruby-dev:38268] Re: rinda/eval.rb

From: Tanaka Akira <akr@...>
Date: 2009-04-03 05:53:13 UTC
List: ruby-dev #38268
In article <20090403113741.A8C2.C613B076@garbagecollect.jp>,
  "U.Nakamura" <usa@garbagecollect.jp> writes:

> 「呼んでNotImplementedErrorが起きるかどうか見ないと使えるかど
> うかわからん」という事象自体が問題であるならば、互換性の問題
> を無視してよければ、forkのような例はそもそもそのような環境で
> はメソッドを定義すべきではないと思います。
> # 前に却下された気もしますが...

最終的にユーザコードはどういう形で書くのが望ましいか、という
ことなんですが、私は現在の NotImplementedError を rescue す
るスタイルは基本的に良いスタイルだと思っています。

  begin
    fork { ... }
  rescue NotImplementedError
    ...
  end

このスタイルの利点は、typo の検出能力が高いことです。fork を
書き間違えた場合、外側に NoMethodError が伝わります。この検
出能力は fork が動作するプラットフォームかどうかに依存しませ
ん。また、fork という名前は 1回書くだけで良いというのも typo
の可能性を減らします。

それに対し、respond_to? を使うスタイルは typo の検出能力が劣
ります。

  if Process.respond_to? :fork
    fork { ... }
  else
    ...
  end

fork と 2回書かなければなりませんし、とくに respond_to? の引
数の :fork を typo すると、else 節が実行され、その内容により
ますがその typo が検出されないかもしれません。そしてもちろん、
fork メソッドの呼び出しのところの typo は、fork のないプラッ
トフォームでは検出できません。

しかし、fork のないプラットフォームで fork メソッドを定義し
ないようにすると、前者のスタイルは使えなくなります。そのスタ
イルで書けば

  begin
    fork { ... }
  rescue NoMethodError
    ...
  end

となりますが、これは typo の検出能力を失っています。typo は
NoMethodError を発生させますが、それは rescue されてしまいま
す。

というわけで、私は fork がない環境で NotImplementedError に
なるのは良いことである、と思っています。

実行せずに fork が動くか調べたいという要求を実現するのにあたっ
て、その良さを失う必要があるかといえば、私のパッチで実現でき
るように、べつに失う必要はありません。

というわけで私は、私の提案が実現する挙動を過渡的なものだとは
思っていません。むしろ、この挙動が良いのだ、と思っています。

じつは、メソッドを定義しないというのは、
Process.{getrlimit,setrlimit} を実装した時にしばらく試したん
ですが、結局、上記のようなことを考えにいたって常に定義するこ
とにしたという経緯があります。
-- 
[田中 哲][たなか あきら][Tanaka Akira]

In This Thread