Використовувати умовні оператори ТА або АБО у операторі IF?


30

Це, мабуть, неймовірно просте запитання, але я поки що не знайшов відповіді (мені не вистачає потрібних джерел, і я не знаю, де шукати допомогу vim).

У мене є умова, і я хотів би, щоб вона включала "І", як

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

але я не зміг знайти синтаксис. Те саме для "АБО".


8
Хе, .AND.і .OR.це синтаксис Фортран, я не бачив, що використовувався поза кодом Fortran довгий-довгий час. :) Vim використовує C-подібний синтаксис замість &&AND та ||для АБО. Дивіться :h expression-syntaxдокладніше.
lcd047

1
Я відчув співчуття у вашому коментарі, з * я не бачив, що використовується поза кодом Fortran протягом довгого, довгого часу. :) *: Дякую тобі за це. Що стосується вашого коментаря, якщо ви опублікуєте його як відповідь, я з радістю прийму його!
Feffe

2
Я вважаю заплутаним, як заголовок питання ставить "і" і або або і "або" поряд один з одним таким чином. (jk)
Бен Міллвуд

2
Я міг написати «і» та / або «або». Але я не наважувався!
Feffe

Відповіді:


30

Як заявив @ lcd047 у своєму коментарі, vimscript використовує C-подібні оператори &&та ||.

Опис їх використання можна знайти на :h expr2. Деякі важливі моменти, згадані доктором, наступні

Ви побачите, що оператори можуть бути об'єднані і &&мають перевагу над ||цим

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

Еквівалентно

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

Також після того, як результат відомий, вираз "коротке замикання", тобто подальші аргументи не оцінюються. Це як те, що відбувається в C.

Якщо ви використовуєте:

if a || b

Вираз буде дійсним навіть bне визначено.


2
Зауважте, що я зробив цю відповідь, тому що @ lcd047 не написав жодної, і я вважав, що замітка про документ буде цікавою, але якщо lcd047 видасть відповідь, я б з радістю видалив цей, щоб дозволити йому справедливо отримати кредит
statox

1
Я сумніваюся в цьому. Колись тому lcd047 сказав мені, що відповіді не публікуватимуть.
муру

@muru: Я також пам’ятав, що бачив це десь, але я не був на 100% впевнений, що це він, а не інший користувач.
statox
Використовуючи наш веб-сайт, ви визнаєте, що прочитали та зрозуміли наші Політику щодо файлів cookie та Політику конфіденційності.
Licensed under cc by-sa 3.0 with attribution required.