mieki256's diary



2014/05/22(木) [n年前の日記]

#1 [ruby] クラスに分けたりバグを修正したり

swfを再生するDXRubyスクリプトをまだ弄ってたり。

今まで、1つのクラスの中で種類を持つ変数を用意して処理を分ける、みたいなことをしていたのだけど。考えてみたら別クラスにして、クラスの種類で判別したほうがいいよなと。

しかし、クラスの種類を判別する方法が分からず。if文なら、if a.class == ClassA みたいな書き方で判別できたのだけど。case 〜 when を使うと妙なことに。

以下のようなソースを書いてテスト。
class TestA

  class TestB
  end

  class TestC
  end

  def check
    t = TestC.new

    puts "[#{t.class}]"

    # OK
    if t.class == TestA::TestB
      puts " t is TestB"
    elsif t.class == TestA::TestC
      puts " t is TestC"
    else
      puts " t is unknown"
    end

    # OK
    if TestA::TestB === t
      puts " t is TestB"
    elsif TestA::TestC === t
      puts " t is TestC"
    else
      puts " t is unknown"
    end

    # NG
    case t.class
    when TestA::TestB
      puts " t is TestB"
    when TestA::TestC
      puts " t is TestC"
    else
      puts " t is unknown"
        end
        
    # OK
    case t
    when TestA::TestB
      puts " t is TestB"
    when TestA::TestC
      puts " t is TestC"
    else
      puts " t is unknown"
    end
  end
end

chk = TestA.new
chk.check
[TestA::TestC]
 t is TestC
 t is TestC
 t is unknown
 t is TestC
case 〜 when を使ってクラス判別をする場合は、=== が使われるという説明記事も見かけた。だったらわざわざ case 〜 when を使わずに if文で書いてしまってもいいのかも。

以上です。

過去ログ表示

Prev - 2014/05 - Next
1 2 3
4 5 6 7 8 9 10
11 12 13 14 15 16 17
18 19 20 21 22 23 24
25 26 27 28 29 30 31

カテゴリで表示

検索機能は Namazu for hns で提供されています。(詳細指定/ヘルプ


注意: 現在使用の日記自動生成システムは Version 2.19.6 です。
公開されている日記自動生成システムは Version 2.19.5 です。

Powered by hns-2.19.6, HyperNikkiSystem Project