2009-07-30 24 views
24

En cada sitio que habla de VBScript, el operador '&' aparece como el operador de concatenación de cadenas. Sin embargo, en algún código que he heredado recientemente, veo que se está utilizando el operador '+' y no veo ningún error como resultado de esto. ¿Es esta una alternativa aceptada?¿Cuál es la diferencia entre VBScript's y el operador &?

Respuesta

37

El operador + está sobrecargado, mientras que el operador & no lo está. El operador & solo hace concatenación de cadenas. En algunos círculos, el operador & se utiliza como una práctica recomendada porque no es ambiguo y, por lo tanto, no puede tener ningún efecto imprevisto como resultado de la sobrecarga.

+0

* 'El operador + está sobrecargado * * * * sobrecargado * ¿en qué sentido? – Wolf

+3

@wolf en VB el operador + puede hacer suma y concatenación, según el contexto. –

+1

Bueno, ya leí esto. Encontré la palabra * sobrecargada * tan sobrecargada que deseé, la respuesta podría ser un poco más precisa en este punto. – Wolf

6

+ operador puede ser contraproducente cuando las cadenas se pueden interpretar como números. Si no quieres sorpresas desagradables, utiliza & para concatenar cadenas.

27

El operador & realiza la concatenación de cadenas, es decir, fuerza a los operandos a convertirse en cadenas (como llamar primero a CStr). +, a su vez, obliga a la adición si una de las expresiones es numérica. Por ejemplo:

1 & 2 

le da 12, mientras que

1 + 2 
"1" + 2 
1 + "2" 

le dan 3.

Por lo tanto, se recomienda utilizar & para la concatenación de cadenas ya que elimina la ambigüedad.

+3

+1 para especificar el número de cadena + número. La respuesta aceptada no menciona vbscript convertir cadenas numéricas en números. – baacke

0

En algunos casos, el + lanzará una excepción; por ejemplo el siguiente:

Sub SimpleObject_FloatPropertyChanging(fvalue, cancel) 
    'fvalue is a floating point number 
    MsgBox "Received Event: " + fvalue 
End Sub 

Usted recibirá una excepción cuando la fuente de objeto COM desencadena el evento - que debe hacer una de las siguientes:

MsgBox "Received Event: " & fvalue 

o

MsgBox "Received Event: " + CStr(fvalue) 

Se puede ser mejor en ambos casos para usar CStr(value); pero usar & por encima de los comentarios para la concatenación de cadenas es casi siempre la mejor práctica.

Cuestiones relacionadas