SHOEISHA iD

※旧SEメンバーシップ会員の方は、同じ登録情報(メールアドレス&パスワード)でログインいただけます

CodeZine編集部では、現場で活躍するデベロッパーをスターにするためのカンファレンス「Developers Summit」や、エンジニアの生きざまをブーストするためのイベント「Developers Boost」など、さまざまなカンファレンスを企画・運営しています。

japan.internet.com翻訳記事

Rubyが.NETプラットフォームにやってくる

.NETプログラマのためのRuby入門

  • X ポスト
  • このエントリーをはてなブックマークに追加

リフレクション

 リフレクションは、実行時にオブジェクトに関する情報を調べる処理です。methodsメソッドを呼び出すと、クラスに使用できるメソッドが分かります。Rubyのあらゆるものの基本クラスはObjectなので、Rubyのすべてのオブジェクトで使用できるメソッドを調べてみましょう。

irb(main):001:0> o = Object.new
=> #<Object:0x3f8feb4>
irb(main):002:0> o.methods
=> ["inspect", "taguri", "clone", "public_methods"
, "taguri=", "display", "instance_variable_defined
?", "equal?", "freeze", "methods", "respond_to?",
...many more methods listed...

 methodsを呼び出した結果は、そのオブジェクトで使用できる各メソッド名が格納された文字列の配列です。クラスはハッシュと同じようなものと考えることができます。methodsを呼び出すのは、そのハッシュテーブルのキー一覧を取得するようなものです。

 もちろん、どんなメソッドがあるかを調べることができても、実際にメソッドを使って何かできなければ、面白くもなんともありません。メソッドを呼び出すには、sendメソッドを使います。次の2つの操作は同等です。

irb(main):003:0> o.inspect
=> "#<Object:0x3f8feb4>"
irb(main):004:0> o.send "inspect"
=> "#<Object:0x3f8feb4>"

 Rubyでは、クラスでmethod_missingメソッドを定義することによって、未定義メソッドを処理できます。

irb(main):139:0> class Object
irb(main):140:1>   def method_missing(*args)
irb(main):142:2>     puts args
irb(main):143:2>   end
irb(main):144:1> end
=> nil
irb(main):145:0> o.foobar 1, 2, 3
foobar
1
2
3
=> nil

 このように、method_missingに渡される引数には、要求されたメソッドと、そのメソッドに渡されたすべての引数が含まれます。おそらく、次のように定義するのが望ましいでしょう。

def method_missing(method, *args)

次のページ
メタプログラミング

この記事は参考になりましたか?

  • X ポスト
  • このエントリーをはてなブックマークに追加
japan.internet.com翻訳記事連載記事一覧

もっと読む

この記事の著者

japan.internet.com(ジャパンインターネットコム)

japan.internet.com は、1999年9月にオープンした、日本初のネットビジネス専門ニュースサイト。月間2億以上のページビューを誇る米国 Jupitermedia Corporation (Nasdaq: JUPM) のニュースサイト internet.comEarthWeb.com からの最新記事を日本語に翻訳して掲載するとともに、日本独自のネットビジネス関連記事やレポートを配信。

※プロフィールは、執筆時点、または直近の記事の寄稿時点での内容です

Brad Wilson(Brad Wilson)

ASP.NETチームのソフトウェア開発者としてMicrosoftに3年以上在籍。開発者としての経歴は15年を超える。.NET 2.0のテスト用開発フレームワークであるxUnit.netの共同製作者の1人である。

※プロフィールは、執筆時点、または直近の記事の寄稿時点での内容です

この記事は参考になりましたか?

この記事をシェア

  • X ポスト
  • このエントリーをはてなブックマークに追加
CodeZine(コードジン)
https://codezine.jp/article/detail/3405 2009/01/14 14:00

おすすめ

アクセスランキング

アクセスランキング

イベント

CodeZine編集部では、現場で活躍するデベロッパーをスターにするためのカンファレンス「Developers Summit」や、エンジニアの生きざまをブーストするためのイベント「Developers Boost」など、さまざまなカンファレンスを企画・運営しています。

新規会員登録無料のご案内

  • ・全ての過去記事が閲覧できます
  • ・会員限定メルマガを受信できます

メールバックナンバー

アクセスランキング

アクセスランキング