メソッド名一覧の表示
Posted feedbacks - xtal
super クラスも検索するようにしてみました。 「bar: || "bar".p」というのは引数なしの lambda 関数を bar に束縛しているような感じです。
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 32 33 34 35 36 37 38 39 40 41 42 43 44 45 | String::start_with: method(sub) {
return this.split("").take(sub.length).to_a.join("") == sub;
}
TargetTest: class {
test_foo: || "test_foo".p;
test_bar: || "test_bar".p;
foo: || "foo".p;
bar: || "bar".p;
}
TargetTest2: class(TargetTest) {
test_foo: || "test_foo_sub".p;
test_baz: || "test_baz".p;
}
TestRunner: class {
suite: method(target, inherited_too: true) fiber {
klasses: [target];
if (inherited_too) {
klasses ~= target.each_ancestor.to_a;
}
override: Map();
klasses {|klass|
klass.each_member {|name, x, meth|
if (! override[name] && name.start_with("test_")) {
yield meth;
}
override[name] = true;
}
}
}
run: method(target) {
suite(target) {
it();
}
}
}
runner: TestRunner();
"---".p;
runner.run(TargetTest2);
"---".p;
runner.run(TargetTest);
|



にしお
#3388()
Rating1/1=1.00
「ある与えられたオブジェクトtargetのメソッドのうち、 "test_"で始まるものをすべて呼びだす」というコードを書いてください。 引数に関しては都合のいいように仮定して構いません(全部0個、など)。
メソッドという概念がない言語の場合は、 「複数の関数への参照を持っているようなオブジェクト(たとえばパッケージとかモジュールとか)から"test_"で始まる関数をすべて呼び出す」と読み替えても構いません。
[ reply ]