3

Peut-on ignorer un paramètre facultatif et assigner une valeur au paramètre après celui qui a été ignoré?AS3: Peut-on ignorer un paramètre optionnel et assigner une valeur au paramètre après le paramètre ignoré?

Par exemple, j'ai une fonction:

public function Dialog(message:String,title:String="Note",dialogsize:int=99):void 
{ 
} 

Je peux facilement appeler la fonction avec un message et un titre:

Dialog("HELLO","Intro"); 

Est-il possible de sauter le titre et juste passer la taille du dialogue? Je l'ai essayé mais ne peut pas rendre le travail: paramètre

Dialog("HELLO",,dialogsize); 

Est-il possible d'ignorer certains paramètres optionnels sans utiliser (repos)?

Répondre

6

Vous pouvez passer null, pour un paramètre "en défaut", et AS3 utilisera la valeur par défaut - - comme si vous aviez omis complètement:

Dialog("HELLO",null,dialogsize); 

Modifier

Je me suis trompé - je pourrais jurer que je l'ai déjà fait, avec succès ... mais mes tests (et ceux de @ www0z0k également) indiquent le contraire. Cela signifie que, pour que le travail ci-dessus fonctionne comme décrit, vous devez également modifier l'implémentation de la fonction.

Quelque chose comme ça fera l'affaire:

public function Dialog(message:String,title:String=null,dialogsize:int=99):void 
{ 
    if(title===null) title = "Note"; 

} 
+0

bien, ce n'est pas impossible mais c'est inutile: je définis la fonction publique Dialog (message: String, titre: String = "Note", dialogsize: int = 99): void {trace ('message =' + message + ', titre = '+ title +', dialogsize = '+ dialogsize); } ', alors appelez Dialog ('msg', null, 250);' et trace est 'message = msg, title = null, dialogsize = 250'. Donc, passer 'null' ne provoquera pas un argument soit sa valeur par défaut – www0z0k

+0

@ www0z0k - Je suis corrigé. (Je pourrais jurer que je l'ai fait comme je l'ai décrit, mais mes tests ont montré la même chose que vous avez signalé). J'ai modifié ma réponse pour refléter quelque chose qui fonctionnera. – Lee

+0

Merci à tous, je vais accepter qu'il n'est pas possible de le faire avec juste les paramètres, la solution est de mettre de la logique dans la fonction pour gérer les arguments envoyés Ou utiliser une approche différente telle que l'objet valorisé. – Stucko

1

il est impossible, mais vous pouvez faire quelque chose comme:

public function Dialog(message:String, optionalArgs: Object):void{ 
    var title: String = optionalArgs['title'] ? optionalArgs['title'] : 'default value'; 
    var dialogsize: int = optionalArgs['dialogsize'] ? optionalArgs['dialogsize'] : 99; 
    var smthElse: String = optionalArgs['smthElse'] ? optionalArgs['smthElse'] : 'another default val'; 
} 

et:
Dialog('msg', {dialogsize: 250, smthElse: 'another value'});

+0

ce n'est pas impossible (voir ma réponse pour plus de détails). – Lee

+0

@ Lee: en passant 'null', il suffit de définir un argument que vous voulez conserver à la valeur par défaut à' null' – www0z0k

+0

convenu. voir mes modifications ci-dessus. – Lee

1

Je voudrais utiliser un objet d'une valeur au lieu d'un objet pour avoir plus de contrôle sur le contenu:

// DialogVO.as 
package 
{ 
    public class DialogVO 
    { 
     public var message : String; 
     public var title : String; 
     public var size : int; 
    } 
} 

// Test.as 
public function createDialog(vo : DialogVO) : void 
{ 
    if(vo.title) 
     // write code for title here 

    if(vo.message) 
     // write code for meassage here 

    if(vo.size) 
     // write code for size here 
} 

// test your method 
var dialogData : DialogVO = new DialogVO(); 
    dialogData.message = "This is the message"; 
    dialogData.size = 92; 

createDialog(dialogData); 
+0

Il est généralement préférable de définir ces valeurs dans le constructeur * (afin que nous puissions rendre l'objet immuable) *, mais nous rencontrons le même problème de paramètres optionnels ... –

Questions connexes