Su ogni sito che parla di VBScript, l'operatore '&
' è elencato come operatore di concatenazione di stringhe. Tuttavia, in qualche codice che ho ereditato di recente, vedo l'operatore '+
' in uso e non vedo errori di conseguenza. È un'alternativa accettata?Qual è la differenza tra VBScript + e operatore?
risposta
L'operatore + è sovraccarico, mentre l'operatore & non lo è. L'operatore & esegue solo concatenazioni di stringhe. In alcuni ambienti l'operatore & viene utilizzato come procedura consigliata poiché non è ambiguo e pertanto non può avere effetti indesiderati a causa dell'overloading.
+
L'operatore può ritorcersi contro quando le stringhe possono essere interpretate come numeri. Se non vuoi che brutte sorprese usi & per concatenare le stringhe.
L'operatore &
esegue la concatenazione di stringhe, ovvero obbliga gli operandi a convertirsi in stringhe (ad esempio prima chiama CStr
). +
, a sua volta, forza l'addizione se una delle espressioni è numerica. Per esempio:
1 & 2
ti dà 12
, mentre
1 + 2
"1" + 2
1 + "2"
darvi 3
.
Quindi, si consiglia di utilizzare &
per la concatenazione di stringhe poiché elimina l'ambiguità.
+1 per specificare numero di stringa + numero. La risposta accettata non menziona vbscript che converte stringhe numeriche in numeri. – baacke
In alcuni casi il + genera un'eccezione; ad esempio il seguente:
Sub SimpleObject_FloatPropertyChanging(fvalue, cancel)
'fvalue is a floating point number
MsgBox "Received Event: " + fvalue
End Sub
Si otterrà un'eccezione quando la fonte oggetto COM genera l'evento - che si deve fare una delle seguenti operazioni:
MsgBox "Received Event: " & fvalue
o
MsgBox "Received Event: " + CStr(fvalue)
E ' potrebbe essere meglio in entrambi i casi usare CStr(value)
; ma usare & per i commenti precedenti per la concatenazione di stringhe è quasi sempre la migliore pratica.
* 'L'operatore + è sovraccarico' * - * sovraccarico * in che senso? – Wolf
@wolf in VB l'operatore + può eseguire sia l'aggiunta che la concatenazione, a seconda del contesto. –
Beh, ho già letto questo. Ho trovato la parola * overloaded * stessa così sovraccaricata che ho desiderato, la risposta potrebbe essere un po 'più precisa in questo punto. – Wolf