Расширенная иллюстрация к вопросу (на примере того, как это можно реализовать на php) и решение на Ruby:
class help{
function router($sex, $stuff){
$method_name = 'if_'.$sex;
$method_name($stuff);
// можно предварительно проверить наличие метода
// method_exists(где_искать, имя_метода)
// или отдать на обработку ошибок в __call()
}
function if_m($stuff){ return 'Мальчики направо'; }
function if_w($stuff){ return 'Девочки налево'; }
// аналог method_missing в Ruby
function __call($name, $param = false){
return 'Идите прямо, пока не определитесь';
}
}
$sex = 'm'
$stuff = 'какая-то важная фигня';
$h = new help();
$h.router($sex, $stuff);
Итого, вопрос: как вызвать метод, если его имя пришло в переменной, или имя метода нужно сконструировать?
upd
Решение найдено (как минимум одно), с использованием send:
def router(act, data)
m = 'prefix_' + act
send(m, data)
end