• [^] # Re: Le but ?

    Posté par (site web personnel, Mastodon) . En réponse au journal Un print(1 + "3a"), ça nous inspire comment ?. Évalué à 2.

    Ce que je voulais dire c'est que comme rien n'est implicite, il faut écrire la fonction pour l'autre addition et ainsi assurer la commutativité de l'addition, ce qui n'a rien d'obligatoire...

    La version exhaustive serait, du coup, celle-là

    with Ada.Text_IO;
    with Ada.Strings; use Ada.Strings;
    with Ada.Strings.Fixed; use Ada.Strings.Fixed;
    procedure bad_add is
     function "+" (Left : Integer;
     Right : String ) return String is
     (Integer'Image (Left) & Right); 
     function "+" (Left : String;
     Right : Integer) return String is
     (Left & Trim (Integer'Image(Right), Both));
    begin
     Ada.Text_IO.Put_Line( 1 + "3a" );
     Ada.Text_IO.Put_Line("3a" + 1);
    end bad_add;

    C'est sûr que si tu écris une fonction permettant explicitement et seulement d'additionner des Int et des String, le programme va pouvoir additionner des Int et des String, encore heureux.

    Certes mais je préfère dire ce que je veux faire que d'avoir un comportement inféré qui n'est pas forcément vrai... Bien qu'à partir du moment où on écrit '+', il semble, par convention, obligatoire que l'opération soit commutative.