福嶋です。

gotoken / math.sci.hokudai.ac.jp (GOTO Kentaro) wrote:
>   def initialize(argtype, *args)
>     case argtype
>     when :TYPE1
>       ...
>     when :TYPE2
>       ...
>     else
>       ...
>     end
>   end
> end

引数のクラスに応じて処理を選ぶだけなら、以下のようにすればよいか
も、と思いましたが出来ませんでした。

class Foo
  def initialize(*args)
    case args
    when [Integer]
      ...
    when [Integer, Integer]
      ...
    when [Integer, String]
      ...
    else
      ...
    end
  end
end

Array#=== は Array#== と同じなんですね。
Array#=== が要素間の===なら出来るんですが。

class Array
  def ===(other)
    return false unless other.is_a? Array
    return false if self.size != other.size
    for i in 0...size
      return false unless self[i] === other[i]
    end
    true
  end
end

以前に Array#=== の意味が include? から変更された時、要素間の===
ではなく、要素間の==が選ばれたのは何故なんでしょう?

----
福嶋正機