ある module に含まれた _test が関数名末尾に付く関数の一覧を取得する
リフレクション系のお題の続編です。
「ある与えられたオブジェクトtargetのメソッドのうち、 "test_"で始まるものをすべて呼びだす」というコードを書いてください。引数に関しては都合のいいように仮定して構いません(全部0個、など)。
メソッドという概念がない言語の場合は、「複数の関数への参照を持っているようなオブジェクト(たとえばパッケージとかモジュールとか)から"test_"で始まる関数をすべて呼び出す」と読み替えても構いません。
-module(test). -export([get_test/1]). get_test(PackageName) -> [X || {X, Y} <- proplists:get_value(exports, PackageName:module_info()), lists:suffix("_test", atom_to_list(X))].
さて、ユーザ登録して投稿してみようっと。
お題を勘違いしてた。_test が末尾に付くじゃなくて、test_ が付く先頭に付く関数の一覧だった(w;lists:prefix/2 を使えば修正可能。
追記
jijixi's diary - メソッド名一覧の表示 (DouKaku?)
ちなみに module_info/1 にキーを与えるとそれに対応する値が得られるんで、proplists とか使う必要無いです。
なるほど!ご指摘ありがとうございます。
-module(test). -export([get_test/1]). get_test(PackageName) -> [X || {X, Y} <- PackageName:module_info(exports), lists:prefix("test_", atom_to_list(X))].