2016-04-14 12 views
0

Diese Frage ist meist nicht von Interesse, um die Funktionalität von VBScript besser zu verstehen. Ich erkenne, dass ich einfach ein wenig Casting machen kann, um zu wissen, was ich von meinem Code erwarten kann, aber in meiner Situation möchte ich verstehen, warum Casting oder irgendein "Workaround" notwendig ist. Der Einfachheit halber ist hier die Grundidee meines Code:Was ist der Rückgabetyp meiner VBScript-Funktion?

variable1 = 1 

Public Function findSomethingInATextString(par1, par2) 
    [...searching with a Do Until loop code here...] 
    Result = 1 
    If([par2 is found in par1]) Then 
     Result = 0 
    End If 
    Return Result 
End Function 

variable1 = findSomethingInATextString("Hello World", "Hello") 

Als ich das laufen bekomme ich einen Type Mismatch Fehler. Ich verstehe nicht, warum das so ist. variable1 ist eine ganze Zahl und findSomethingInAString() gibt eine Ganzzahl zurück. Sie scheinen derselbe Datentyp zu sein.

Ich arbeite in einer eingeschränkten Umgebung, in der ich nicht viel Debuggen kann (es ist schmerzlich langsam, in diesem Programm zu programmieren ...). Daher kann ich im Moment nicht sagen, um welchen Datentyp es sich handelt - ich weiß nur, dass es offensichtlich keine Ganzzahl ist.

Nach all dem und um sicherzustellen, dass meine Frage klar ist, ich bin neugierig zu wissen, was der Rückgabetyp meiner Funktion ist (wenn jemand zu wissen, geschieht), aber meine eigentliche Frage ist: Warum isn‘ t Der Rückgabetyp, der mit Variable1 übereinstimmt?

+0

Dies ist nicht VBScript. In VBScript ist 'Variant' der einzige Datentyp. Bitte markieren Sie dies mit der richtigen Sprache. –

+2

Saum, wenn Ihr Pseudocode _VBScript_ ... sein sollte. Es gibt keine 'Return'-Anweisung in _VBScript_. Eine Funktion gibt einen Wert zurück, indem sie ihrem Namen in einer oder mehreren Anweisungen der Prozedur einen Wert zuweist. Verwenden Sie 'findSomethingInAString = Result' anstelle von' Return Result' und lassen Sie das Wort _string_ in 'Public Function findSomethingInAString (par1, par2) weg.' – JosefZ

+0

Oh oops. Einfach eine Angewohnheit, "string" in den Parameterteil zu setzen. Ich werde das bearbeiten. – Alamb

Antwort

2

Verwenden Sie die minimale Skript

Return 

Ausgabe

cscript 36633603.vbs 
...36633603.vbs(1, 1) Microsoft VBScript runtime error: Type mismatch: 'return' 

zu sich selbst zu beweisen, dass nur return in einem VBScript Erwähnens einen Typenkonfliktfehler werfen.

Glauben Sie dem JosefZ-Kommentar, dass VBScript Funktionswerte zurückgibt, indem es dem Namen der Funktion zuweist. Besser: Lesen Sie die docs (bevor Sie versuchen, Code zu schreiben).

Beweis:

Function f1() 
    f1 = 1 
End Function 

WScript.Echo f1(), TypeName(f1()) 

Ausgang:

cscript 36633603.vbs 
1 Integer 
+0

Dank @Ekkehard, das ist ein interessanter Test zu tun. Ich glaube JosefZ und habe die Dokumentation gelesen, es war nur einer jener Tage, an denen ich für 3 verschiedene Projekte Code in 3 verschiedenen Sprachen schrieb und gewohnheitsmäßig "Return" ohne nachzudenken schrieb. – Alamb