2009-07-30 25 views
24

Trên mọi trang web nói về VBScript, toán tử '&' được liệt kê là toán tử nối chuỗi. Tuy nhiên, trong một số mã mà tôi đã thừa hưởng gần đây, tôi thấy toán tử '+' đang được sử dụng và tôi không thấy bất kỳ lỗi nào do việc này. Đây có phải là phương án được chấp nhận không?Sự khác biệt giữa + và toán tử của VBScript là gì?

Trả lời

37

Toán tử + bị quá tải, trong khi toán tử & thì không. Toán tử & chỉ thực hiện nối chuỗi. Trong một số vòng tròn, toán tử & được sử dụng như một phương pháp hay nhất vì nó rõ ràng và do đó không thể có bất kỳ hiệu ứng ngoài ý muốn nào do việc quá tải.

+0

* 'Toán tử + bị quá tải' * - * quá tải * theo nghĩa nào? – Wolf

+3

@wolf trong VB toán tử + có thể thực hiện cả phép cộng và nối, phụ thuộc vào ngữ cảnh. –

+1

Vâng, tôi đã đọc điều này. Tôi thấy từ * quá tải * chính nó quá tải đến nỗi tôi ước, câu trả lời có thể chính xác hơn một chút vào thời điểm này. – Wolf

6

+ nhà điều hành có thể phản tác dụng khi chuỗi có thể được hiểu là số. Nếu bạn không muốn bất ngờ khó chịu sử dụng & để nối chuỗi.

27

Toán tử & thực hiện chuỗi nối, nghĩa là buộc các toán hạng được chuyển thành chuỗi (như gọi số CStr trên chúng trước). +, đến lượt nó, thêm lực nếu một trong các biểu thức là số. Ví dụ:

1 & 2 

mang đến cho bạn 12, trong khi

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

cung cấp cho bạn 3.

Vì vậy, bạn nên sử dụng & để ghép chuỗi vì nó giúp loại bỏ sự mơ hồ.

+3

+1 để chỉ định số chuỗi + số. Câu trả lời được chấp nhận không đề cập đến các chuỗi số chuyển đổi vbscript thành số. – baacke

0

Trong một số trường hợp, + sẽ ném một ngoại lệ; ví dụ như sau:

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

Bạn sẽ nhận được một ngoại lệ khi nguồn đối tượng COM bắn sự kiện - bạn phải làm một trong hai điều sau đây:

MsgBox "Received Event: " & fvalue 

hoặc

MsgBox "Received Event: " + CStr(fvalue) 

Nó có thể là tốt nhất trong cả hai trường hợp để sử dụng CStr(value); nhưng sử dụng & cho mỗi bình luận ở trên cho chuỗi nối là hầu như luôn luôn thực hành tốt nhất.

Các vấn đề liên quan