Задать вопрос
  • Как в Ruby вызвать метод по имени?

    ArteNonMarte
    @ArteNonMarte Автор вопроса
    Профессиональный мечтатель
    Расширенная иллюстрация к вопросу (на примере того, как это можно реализовать на 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
    Ответ написан
    Комментировать