Sử dụng toán tử có điều kiện VÀ hoặc HOẶC trong câu lệnh IF?


30

Đây có lẽ là một câu hỏi cực kỳ đơn giản, nhưng tôi không tìm thấy câu trả lời nào cho đến nay (tôi phải thiếu các nguồn chính xác và tôi không biết tìm kiếm ở đâu trong trợ giúp của vim).

Tôi có một điều kiện và tôi muốn nó bao gồm 'VÀ', như

if (condition1 .AND. condition2)
   "do what I want you to do
endif

nhưng tôi không thể tìm thấy cú pháp. Điều tương tự cho 'HOẶC'.


8
Heh, .AND..OR.là cú pháp của Fortran, tôi đã không thấy rằng nó được sử dụng bên ngoài mã Fortran trong một thời gian dài. :) Vim sử dụng cú pháp giống C thay thế, &&cho AND và ||cho OR. Xem :h expression-syntaxđể biết thêm.
lcd047

1
Tôi cảm thấy thương cảm trong nhận xét của bạn, với * Tôi đã không thấy rằng nó được sử dụng bên ngoài mã Fortran trong một thời gian dài. :) *: cảm ơn vì điều đó. Đối với bình luận của bạn, nếu bạn đăng nó như một câu trả lời, tôi sẵn sàng chấp nhận nó!
Feffe

2
Tôi thấy khó hiểu khi tiêu đề câu hỏi đặt "và" và hoặc "hoặc" cạnh nhau như thế. (jk)
Ben Millwood

2
Tôi có thể đã viết "và" và / hoặc "hoặc". Nhưng tôi không dám!
Feffe

Câu trả lời:


30

Như @ lcd047 đã nói trong nhận xét của mình, vimscript sử dụng các toán tử giống như C &&||.

Bạn có thể tìm thấy mô tả về việc sử dụng của họ trên :h expr2. Một số điểm quan trọng được đề cập bởi tài liệu như sau

Bạn sẽ thấy rằng các toán tử có thể được nối và &&được ưu tiên hơn ||, vì vậy

&nu || &list && &shell == "csh"

Tương đương với

&nu || (&list && &shell == "csh")

Ngoài ra, một khi kết quả được biết đến, biểu thức "ngắn mạch", nghĩa là, các đối số tiếp theo không được đánh giá. Điều này giống như những gì xảy ra trong C.

Nếu bạn dùng:

if a || b

Biểu thức sẽ hợp lệ thậm chí bkhông được xác định.


2
Lưu ý rằng tôi đã thực hiện câu trả lời này vì @ lcd047 đã không viết và tôi nghĩ rằng ghi chú về tài liệu sẽ rất thú vị nhưng nếu lcd047 tạo ra câu trả lời, tôi sẽ vui lòng xóa câu này để cho anh ta nhận được tín dụng
statox

1
Tôi nghi ngờ điều đó. Cách đây không lâu, LCD047 nói với tôi rằng họ sẽ không đăng câu trả lời.
muru

@muru: Tôi cũng nhớ đã thấy điều đó ở đâu đó nhưng tôi không chắc chắn 100% đó là anh ấy chứ không phải người dùng khác.
statox
Khi sử dụng trang web của chúng tôi, bạn xác nhận rằng bạn đã đọc và hiểu Chính sách cookieChính sách bảo mật của chúng tôi.
Licensed under cc by-sa 3.0 with attribution required.