На каждом сайте, который говорит о VBScript, оператор '&
' указан как оператор конкатенации строк. Однако в некотором коде, который я недавно унаследовал, я вижу, что используется оператор '+
', и в результате этого я не вижу никаких ошибок. Является ли это приемлемой альтернативой?
В чем разница между операторами VBScript + и &?
Ответы (4)
Оператор + перегружен, а оператор & — нет. Оператор & выполняет только конкатенацию строк. В некоторых кругах рекомендуется использовать оператор &, поскольку он однозначен и, следовательно, не может иметь непреднамеренных эффектов в результате перегрузки.
The + operator is overloaded
-- перегружен в каком смысле?
- person Wolf; 08.12.2016
Оператор &
выполняет конкатенацию строк, то есть принудительно преобразует операнды в строки (например, сначала вызывая для них CStr
). +
, в свою очередь, принудительно добавляет, если одно из выражений является числовым. Например:
1 & 2
дает вам 12
, тогда как
1 + 2
"1" + 2
1 + "2"
дать вам 3
.
Таким образом, рекомендуется использовать &
для объединения строк, поскольку это устраняет неоднозначность.
Оператор +
может иметь неприятные последствия, когда строки можно интерпретировать как числа. Если вы не хотите неприятных сюрпризов, используйте & для объединения строк.
В некоторых случаях + вызовет исключение; например следующее:
Sub SimpleObject_FloatPropertyChanging(fvalue, cancel)
'fvalue is a floating point number
MsgBox "Received Event: " + fvalue
End Sub
Вы получите исключение, когда источник COM-объекта инициирует событие — вы должны выполнить одно из следующих действий:
MsgBox "Received Event: " & fvalue
or
MsgBox "Received Event: " + CStr(fvalue)
В любом случае лучше использовать CStr(value)
; но использование & в приведенных выше комментариях для конкатенации строк почти всегда является лучшей практикой.