Можете ли вы проверить с помощью функции даты со временем.
Язык программирования Значка имеет эту функцию.
С помощью генераторов можно сделать
if i = (0 | 1) then write("0 or 1")
который успешно выполняется если я = 0 или я = 1. Можно даже сделать:
if (i | j | k) = (0 | 1) then write("0 or 1")
который успешно выполняется, если какой-либо из меня, j, или k равен 0 или 1.
Основная идея позади этого состоит в том что каждый из тех (1|2|3..)
последовательности создают генератор, который возвратит каждое из значений в свою очередь, пока оно не исчерпает значения. При использовании генератора в булевой цитате как это значения будут требовать от генератора, пока сравнение не успешно выполняется. При объединении двух генераторов по обе стороны от сравнения все возможные комбинации будут предприняты, пока каждый не успешно выполняется. (Вместо возвращают false, оператор равенства "сбои", если значения не равны.)
Я, кажется, вспоминаю, что Паскаль имел in
оператор как в:
if x in (foo, bar) then
...
Относительно то, почему это более широко не поддерживается, бьет меня. Это походит на довольно хороший кусок синтаксического сахара.
Единственное место я вспоминаю использование, что синтаксис находится в КОБОЛе приблизительно 25 лет назад.
Я подозреваю причину, она широко не поддерживается, то, потому что она приводит к неоднозначностям, которые не может разрешить компилятор. В Вашем конкретном случае это не конкретная проблема, потому что "это" и "которые" являются строками, для которых условная операция ИЛИ не имеет никакого смысла. Но рассмотрите этот отрывок на языке как C, где результатом условного выражения является булево значение 0 или 1:
int a = 22;
int b = 99;
int rslt = SomeFunction();
if (rslt == (a || b))
В этой точке компилятор не может надежно определить то, что Вы хотите. Сделайте Вы предназначаете это:
if (rslt == a || rslt == b)
или, сделал Вы предназначаете:
if ((rslt == 0 && a == 0 && b == 0) || (rslt == 1 && a == 1 && b == 1))
Вы могли ограничить типы, для которых мог использоваться такой синтаксис, но затем Вы складываете исключения сверху того, что идеально должно быть ортогональным синтаксисом. Это собирается смутить пользователей и усложнить компилятор.
Это также вынуждает выражения быть оцененными по-другому в условных выражениях, чем в операторах присваивания. Это также, несомненно, усложнило бы компилятор.
Это могло, конечно, быть сделано работать, но я думаю, что это потребовало бы нового синтаксиса с перегруженными символами и всеми для сомнительного усиления.
Интерактивная художественная литература (текстовое приключение) авторизированный язык Сообщает, поддерживает его с помощью 'или' оператор (отличный от обычного логического - или который записан ‘||’):
if (qty==2 or 3)
print "some";
else
print "many";
Существует ли причина, почему это широко не поддерживается?
Это немного волшебно особым случаем; не ясно, что это делает в чем-либо другой, но простое выражение в качестве примера.
if (n or 8==m+(1 or 2) or 7) // plausible
if (qty<4 or 5) // huh?
a= "cat" or "dog" // er
‘Если значение в (последовательности)’ нотация, доступная в Python и других современных языках сценариев, вероятно, приняло эту нишу окончательно теперь.
||
оператор является бинарным оператором, который берет два операнда и возвращает единственное значение. Из-за пути выражения оценены на большинстве главных языков, было бы невозможно использовать тот синтаксис, чтобы проверить, равно ли значение одному из множества значений. Вот почему это не поддерживается на большинстве главных языков.
in
синтаксис, что @1800 размещенной ИНФОРМАЦИИ, однако, поддерживается многими языками. Если это не поддерживается на Вашем языке, Вы могли бы просто создать вызванную функцию in()
или in_array()
который берет два аргумента, значение и массив и возвраты true
если массив содержит то значение. (PHP, например, имеет встроенный in_array () функция.)
В Python можно записать как это
if(foobar in ('this', 'that', 'and something else'))
('это', 'что', 'и что-то еще') - это - тип списка.
Так, я думаю на любом языке ООП, можно создать собственный класс:
MyClass(object):
List values
def in(value):
return search_value_in_values(value)
и запишите что-то вроде этого:
if(new MyClass('this', 'that', 'and something else').in(foobar))