ある module に含まれた _test が関数名末尾に付く関数の一覧を取得する

メソッド名一覧の表示 どう書く?org

リフレクション系のお題の続編です。

「ある与えられたオブジェクト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))].