ドゥアイネットのプログラマー、湯川が開発日記を綴ります。

CALENDAR
S M T W T F S
1234567
891011121314
15161718192021
22232425262728
293031    
<< December 2019 >>
ARCHIVES
CATEGORIES
<< Mapion Flash Maps API | main | モーダルの背景 >>
リフレクション
自分が作成していないシステムを改修しているときに、
使用されているクラスの定義を見たいときがあります。

クラスが定義されている部分が「pcurl」にされていたりして
ファイルがない場合、見ることができません。

そんなときに「リフレクション」を使うと便利です。

こうすると
{import * from CURL.LANGUAGE.REFLECTION}

{value
  let t:ClassType = Table
  let members:Table =
    {Table
      {row-prototype
        {cell-prototype "name"},
        {cell-prototype "type"}
      }
    }
  {for m in {t.get-members
         search-superclasses? = false,
         filter = ClassMember.option-filter
       }
   do
    {members.add
      {row-prototype
        {cell-prototype m.name},
        {cell-prototype m.type}
      }
    }
  }
  members
}

こんな感じで出力されます。
name:type
halign:any
valign:any
hstretch?:bool
vstretch?:bool
horizontal-line-width:any
vertical-line-width:any
internal-borders:TableInternalBorders
display-context:#DisplayContext
horizontal-line-color:FillPattern
vertical-line-color:FillPattern
border-color:FillPattern
cell-border-spec:#BorderSpec
cell-border-width:any
cell-margin:any
cell-border-color:FillPattern
cell-border-style:BorderStyle
data-binding-context:#DataBindingContext

ClassTypeの「get-members」メソッドを使うことで、
上記の例では「Table」クラスのメンバを取得しています。
「Table」のところを任意のクラスに書き換えることで、
そのクラスのメンバを取得することができます。

今日の仕事で使う機会があったのでメモしておきます。
| Curl | 18:32 | comments(0) | - |
コメント
コメントする