[#37021] [RAA] RAA/2.3 — "U.Nakamura" <usa@...>

みなさんこんにちは。

20 messages 2003/01/30

[ruby-list:36949] Re: Arrayの判定

From: Masaaki Sakano <mas@...>
Date: 2003-01-17 18:13:39 UTC
List: ruby-list #36949
坂野 正明です。

In <200301171410.XAA22114@mail5.rim.or.jp>,
<nonta@yo.rim.or.jp> wrote:
> def output( data )
>   print "(\n"
>   data.each do |word|
>     if wordがArray型ならば
>       output( word )
>     else
>       print "#{word}\n"
>     end
>   end
>   print ")\n"
> end
> 
> ここの「wordがArray型ならば」というところはどのように
> 書けばいいのでしょうか?

In <20030117143338.3FFC5AF5A@mail.nmn.jp>,
<kofu@nmn.jp> wrote:
|     if word.is_a?(Array)
|  あるいは、
|     if word.kind_of?(Array)

同じことですが、別解として、

    if Array === word

でもいいですね (word === Array は不可)。あるいは、

    case word
    when Array
	...
    else
	...
    end

でもOK (when 節の判定は、"===" なので、上の if と同じこと)。


ただ、、、Ruby の推奨は、Array というクラス名で直接判定ではなく、
必要なメソッド(の名前)があるかどうかで判断した方がよい、
ということに(慣習として?)なっていたと理解しています。
例えば、Array クラスを継承した Arraynew クラスが将来できた
(作った)として、その Arraynew クラスに対しても、(上の)スクリプトは
同じように動いて欲しい、というのが普通でしょうから。

どのメソッド名で判断するかは場合によるでしょうが、一般的には、Array なら

    if defined? word.to_ary

を使う、というのが、私の理解です。

# もっとも、所詮スタイルの問題なので、野田さんのお気に召された方法でどうぞ。

坂野 正明

In This Thread