• [^] # Re: .call

    Posté par . En réponse au message Pointeur de fonction ?. Évalué à 1.

    Je ne suis pas sûr d'avoir compris ta réponse :)

    J'ai plusieurs fonctions (des exemples jouets ici) :

    def mi(a,b,c,d)
    return a*b*c*d
    end

    def log(a,b,c,d)
    return a/b/c/d
    end

    J'ai un paramètre, "mes" et je fais

    case mes
    when "mi"
    my_function = mi # mais ça marche pas comme ça
    when "log"
    my_function = log # mais ça marche pas comme ça
    end

    et je voudrais qu'un appel à "my_function(a,b,c,d)" appelle log(a,b,c,d) ou mi(a,b,c,d) en fonction du choix du case.

    J'ai trouvé une solution qui me paraît un peu gruik.

    class MesMesures
    def mi(a,b,c,d)
    ...
    end # mi

    def log(a,b,c,d)
    ...
    end # log
    end # class MesMesures

    [...]

    all_func = MesMesures.new
    case mes
    when "mi"
    ma_fonction = all_func.method( :mi )
    when "log"
    ma_fonction = all_func.method( :log )
    end
    ...
    ma_fonction.call(a,b,c,d) # fonctionne !