MsgBox “” vs MsgBox() en VBScript
Je suis en train d'écrire un script VBScript et je suis à l'aide de fonctions telles que l'Aléatoire, et MsgBox. Je suis curieux de savoir quelle est la différence de l'aide () et ne pas les utiliser. Par exemple:
Randomize
- Cette ligne fonctionne.
Randomize()
- Cette ligne fonctionne aussi.
MsgBox "Hello world!"
- Cela fonctionne.
MsgBox ("Hello world!")
- Cela fonctionne ainsi.
Le script sera exécuté sur plusieurs machines avec différentes versions de Windows (au moins Windows XP). Je me demandais si j'allais être capable de compatibilité/questions de syntaxe dans l'utilisation de ces fonctions.
Vous devez vous connecter pour publier un commentaire.
Un callable morceau de code (de routine) peut être un Sous (appelé un effet secondaire, ce qu'il
le fait) ou une Fonction (appelée pour sa valeur de retour) ou un mélange des deux. Comme les docs
pour MsgBox
indiquer, cette routine est du troisième type.
La syntaxe des règles de VBScript sont simples:
Utilisation de la liste des paramètres () lors d'un appel (routine) Fonction
Si vous souhaitez afficher un message à l'utilisateur et le besoin de connaître de l'utilisateur
reponse:
Ne pas utiliser le paramètre list () lors d'un appel (routine) Sous
Si vous souhaitez afficher un message à l'utilisateur et ne sont pas intéressés
dans la réponse:
Cette belle simplicité est foiré par:
Le défaut de conception de l'utilisation de () pour les listes de paramètres et à force d'appel-par-valeur
la sémantique
S (n) ne signifie pas "appel S avec n", mais "appel S avec une copie de la n de la valeur".
Les programmeurs de voir que
des "œuvres" sont en pour les une surprise quand ils essaient:
Le compilateur clémence à l'égard de vide () dans un Sous appel. La "pure"
Sous Randomize (appelé pour le côté effet de la définition de la graine aléatoire) peut
être appelé par
bien que le () ne peuvent pas dire "donnez-moi votre valeur de retour), ni de "passer
quelque chose en valeur". Un peu plus de rigueur ici serait de force à prgrammers
être conscient de la différence dans
et
L'instruction d'Appel qui permet de la liste des paramètres () dans la Sous-appels:
qui a en outre encourager les développeurs à utiliser () sans réfléchir.
(Basé sur Qu'entendez-vous "ne peut pas utiliser des parenthèses?")
À ma connaissance, ce sont les règles pour l'appel de sous-routines et fonctions en VBScript:
Call
mot-clé joindre les arguments entre parenthèsesPuisque vous avez probablement l'habitude d'être à l'aide de la
Call
mot clé que vous avez seulement besoin d'apprendre la règle que si vous appelez une fonction et que vous voulez attribuer ou utiliser la valeur de retour, vous devez joindre les arguments entre parenthèses. Sinon, ne pas utiliser de parenthèses.Voici quelques exemples:
WScript.Echo 1, "two", 3.3
- l'appel d'une sous-routineWScript.Echo(1, "two", 3.3)
- erreur de syntaxeCall WScript.Echo(1, "two", 3.3)
mot - cléCall
nécessite parenthèseMsgBox "Error"
- l'appel d'une fonction "like" une sous-routineresult = MsgBox("Continue?", 4)
- l'appel d'une fonction où la valeur de retour est utiliséWScript.Echo (1 + 2)*3, ("two"), (((3.3)))
- l'appel d'une sous-routine où les arguments sont traitées par des expressions impliquant une parenthèse (notez que si vous entourer d'une variable par parenthèse dans une liste d'arguments, il modifie le comportement de l'appel par référence à l'appel par valeur)WScript.Echo(1)
- apparemment, c'est un sous-programme appel à l'aide de parenthèses, mais en réalité, l'argument est tout simplement l'expression(1)
et qui est ce qui tend à confondre les gens qui sont utilisés à d'autres langages de programmation où vous devez spécifier les parenthèses lors de l'appel de sous-routinesJe ne suis pas sûr de savoir comment interpréter votre exemple,
Randomize()
.Randomize
est un sous-programme qui accepte un seul argument facultatif mais même si la sous-routine n'ont pas d'arguments, il est acceptable de l'appeler avec un vide paire de parenthèses. Il semble que le VBScript analyseur a une règle spéciale pour un argument vide de la liste. Cependant, mon conseil est d'éviter cette spéciale de construction et d'appeler tout simplement tout sous-programme sans l'aide de parenthèses.Je suis assez sûr que ces règles syntaxiques s'applique à l'ensemble des versions différentes de systèmes d'exploitation.
Vous êtes simplement en utilisant un seul paramètre à l'intérieur de la fonction, donc il fonctionne très bien dans les deux cas, comme suit:
Mais quand vous utilisez plus d'un paramètre, En VBScript méthode parenthèses renvoient une erreur et sans parenthèse fonctionnera comme:
Le code ci-dessus fonctionne parfaitement mais
lèvera une erreur.
Essayez ceci!! 🙂
Vous avez à différents sous-routines et fonctions en vba... en Général (autant que je sache), sous-routines ne retourne rien et les environs parenthèse sont facultatifs. Pour les fonctions, vous devez écrire la parenthèse.
Comme pour ton exemple, MsgBox n'est pas une fonction mais une sous-routine et donc la parenthèse sont en option dans ce cas. Une exception avec des fonctions est, lorsque vous n'avez pas attribuer la valeur renvoyée, ou lorsque la fonction ne pas consommer un paramètre, vous pouvez les laisser à l'écart la parenthèse de trop.
Cette réponse va dans un peu plus en détail, mais, fondamentalement, vous devez être sur le enregistrer un autre côté, lorsque vous fournissez parenthèse pour les fonctions et les laisser à l'écart pour les sous-routines.
Call
mot-clé.