MsgBox "" vs MsgBox () in VBScript
Ich versuche zu schreiben, ein VBScript, und ich bin mit Funktionen wie Zufällig, und MsgBox. Ich bin neugierig, was ist der Unterschied von mit () und nicht mit Ihnen. Zum Beispiel:
Randomize
- Diese Zeile funktioniert.
Randomize()
- Diese Zeile funktioniert auch.
MsgBox "Hello world!"
- Das funktioniert.
MsgBox ("Hello world!")
- Das funktioniert auch.
Wird das script läuft auf mehreren Maschinen mit verschiedenen Versionen von Windows (mindestens Windows XP). Ich Frage mich, ob ich bekommen würde jegliche Kompatibilität/syntax Probleme bei der Verwendung dieser Funktionen.
InformationsquelleAutor der Frage user1862387 | 2012-11-29
Du musst angemeldet sein, um einen Kommentar abzugeben.
Ein aufrufbares Stück code (routine) kann ein Sub (genannt für eine Nebenwirkung/was es
es tut) oder eine Funktion (genannt für seine Rückgabewert) oder eine Mischung aus beidem. Als die docs
für MsgBox -
geben, diese routine ist mit der Dritten Art.
Den syntaktischen Regeln von VBScript sind einfach:
Verwenden Sie den parameter-Liste () beim Aufruf einer (routine -) Funktion
Wenn Sie möchten, um eine Meldung anzuzeigen, die Benutzer und wissen müssen des Benutzers
Antwort:
Nicht, verwenden Sie den parameter-Liste () beim Aufruf einer (routine -) Sub
Wenn Sie möchten, um eine Meldung angezeigt, um den Anwender zu und sind nicht interessiert
in der Antwort:
Diese schöne Einfachheit versaut ist durch:
Den design-Fehler des mittels () für parameter-Listen und zu zwingen, call-by-value
Semantik
S (n) heißt nicht "call S mit n", sondern "call S mit einer Kopie der n-Wert".
Programmierer sehen, dass
'funktioniert', sind Sie in für eine überraschung, wenn Sie versuchen:
Den compiler Nachsicht mit Bezug auf leer () in ein Sub-Aufruf. Die 'pure'
Sub Randomize (für die genannte Nebenwirkung der Einstellung für die zufällige Streuung) kann
genannt werden von
obwohl die () kann weder bedeuten, "geben Sie mir Ihren return-Wert), noch "passieren
etwas von Wert". Ein bisschen mehr strenge wäre hier eine Kraft prgrammers zu
beachten Sie den Unterschied in der
und
Die Call-Anweisung, die es erlaubt parameter-Liste () in Sub-Aufrufe:
die weitere Förderung der Programmierer zu verwenden (), ohne zu denken.
(Basierend auf Was meinst du mit "keine Klammern verwenden?")
InformationsquelleAutor der Antwort Ekkehard.Horner
Meines Wissens sind die Regeln für den Aufruf von Unterprogrammen und Funktionen, die in VBScript:
Call
Schlüsselwort schließen Sie die Argumente in KlammernDa Sie wahrscheinlich nicht mit der
Call
Stichwort-Sie müssen nur lernen, die Regel, dass wenn Sie eine Funktion aufrufen und zuweisen möchten, oder verwenden Sie die return-Wert, den Sie brauchen, um zu schließen Sie die Argumente in Klammern. Ansonsten, nicht Klammern.Hier sind einige Beispiele:
WScript.Echo 1, "two", 3.3
- das aufrufen einer UnterroutineWScript.Echo(1, "two", 3.3)
- syntax-FehlerCall WScript.Echo(1, "two", 3.3)
- StichwortCall
erfordert KlammerMsgBox "Error"
- eine Funktion aufrufen "wie" ein Unterprogrammresult = MsgBox("Continue?", 4)
- Aufruf einer Funktion, in der der Rückgabewert verwendet wird,WScript.Echo (1 + 2)*3, ("two"), (((3.3)))
- das aufrufen einer Unterroutine, wo der Argumente werden berechnet, indem Ausdrücke mit Klammern (beachten Sie, dass wenn Sie umgeben eine variable, indem Sie in Klammern eine Liste von Argumenten, es ändert das Verhalten von call-by-reference, call-by-value)WScript.Echo(1)
- offensichtlich ist dies ein Unterprogramm-Aufruf mit Hilfe der Klammer in Wirklichkeit aber das argument ist einfach der Ausdruck(1)
und das ist, was neigt dazu, um Leute zu verwirren, die verwendet werden, zu anderen Programmiersprachen, wo Sie angeben müssen, die Klammern beim Aufruf von UnterprogrammenIch bin mir nicht sicher, wie Sie Sie interpretieren Ihre Beispiel
Randomize()
.Randomize
ist ein Unterprogramm, das akzeptiert ein einziges optionales argument, aber selbst wenn das Unterprogramm hat keine Argumente, es ist akzeptabel, rufen Sie es mit ein leeres paar Klammern. Es scheint, dass der VBScript parser hat eine spezielle Regel für eine leere Argumentliste. Aber mein Rat ist, zu vermeiden, diese Besondere konstruieren und einfach rufen Sie eine subroutine ohne Verwendung von Klammern.Ich bin mir ziemlich sicher, dass diese syntaktischen Regeln gilt über verschiedene Versionen von Betriebssystemen.
InformationsquelleAutor der Antwort Martin Liversage
Sind Sie nur mit einem einzigen parameter innerhalb der Funktion, daher ist es in Ordnung, die in beiden Fällen wie folgt:
Aber wenn Sie mehr als einen parameter, In die VBScript-Methode wird die Klammer wirft einen Fehler und ohne Klammern funktionieren wie:
Dem obigen code wird flüssig laufen, aber
wirft einen Fehler.
Versuchen Sie, diese!! 🙂
InformationsquelleAutor der Antwort Shivam Gupta
Haben Sie verschiedene sub-Routinen und Funktionen in vba... in der Regel (soweit ich weiß), sub-Routinen geben nichts zurück und die umgebenden Klammern sind optional. Für Funktionen, die Sie schreiben müssen die Klammern.
Als für dein Beispiel, MsgBox ist keine Funktion, sondern eine sub-routine und damit die Klammern sind optional. Eine Ausnahme mit Funktionen ist, wenn Sie nicht, weisen Sie den zurückgegebenen Wert, oder wenn die Funktion nicht verbrauchen, können Sie den parameter lassen sich die Klammern auch.
Diese Antwort geht in ein bisschen mehr detail, aber grundsätzlich sollte man auf der sicheren Seite sein, wenn man etwas in Klammern für Funktionen und lassen Sie sich für sub-Routinen.
InformationsquelleAutor der Antwort Tom