Пишет, 'если (foobar == (“это” ||, “что”))', чтобы проверить, равен ли foobar “этому” или "который" поддерживал на каких-либо главных языках?

Можете ли вы проверить с помощью функции даты со временем.

7
задан Graham 29 January 2019 в 02:14
поделиться

6 ответов

Язык программирования Значка имеет эту функцию.

С помощью генераторов можно сделать

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, оператор равенства "сбои", если значения не равны.)

4
ответ дан 7 December 2019 в 03:21
поделиться

Я, кажется, вспоминаю, что Паскаль имел in оператор как в:

if x in (foo, bar) then
  ...

Относительно то, почему это более широко не поддерживается, бьет меня. Это походит на довольно хороший кусок синтаксического сахара.

2
ответ дан 7 December 2019 в 03:21
поделиться

Единственное место я вспоминаю использование, что синтаксис находится в КОБОЛе приблизительно 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))

Вы могли ограничить типы, для которых мог использоваться такой синтаксис, но затем Вы складываете исключения сверху того, что идеально должно быть ортогональным синтаксисом. Это собирается смутить пользователей и усложнить компилятор.

Это также вынуждает выражения быть оцененными по-другому в условных выражениях, чем в операторах присваивания. Это также, несомненно, усложнило бы компилятор.

Это могло, конечно, быть сделано работать, но я думаю, что это потребовало бы нового синтаксиса с перегруженными символами и всеми для сомнительного усиления.

2
ответ дан 7 December 2019 в 03:21
поделиться

Интерактивная художественная литература (текстовое приключение) авторизированный язык Сообщает, поддерживает его с помощью 'или' оператор (отличный от обычного логического - или который записан ‘||’):

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 и других современных языках сценариев, вероятно, приняло эту нишу окончательно теперь.

1
ответ дан 7 December 2019 в 03:21
поделиться

|| оператор является бинарным оператором, который берет два операнда и возвращает единственное значение. Из-за пути выражения оценены на большинстве главных языков, было бы невозможно использовать тот синтаксис, чтобы проверить, равно ли значение одному из множества значений. Вот почему это не поддерживается на большинстве главных языков.

in синтаксис, что @1800 размещенной ИНФОРМАЦИИ, однако, поддерживается многими языками. Если это не поддерживается на Вашем языке, Вы могли бы просто создать вызванную функцию in() или in_array() который берет два аргумента, значение и массив и возвраты true если массив содержит то значение. (PHP, например, имеет встроенный in_array () функция.)

0
ответ дан 7 December 2019 в 03:21
поделиться

В 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))
0
ответ дан 7 December 2019 в 03:21
поделиться
Другие вопросы по тегам:

Похожие вопросы: