Использование || оператор - PullRequest
0 голосов
/ 30 октября 2009

Я использую язык XML, который не имеет '||' оператор. Как мне добиться эффекта этого оператора? Язык также не поддерживает троичный оператор. Кроме подхода «если-еще», есть ли другой способ добиться этого?

Выражение есть, если ((x == 2) || (y == 2)), и должно достигать этого без ||,?:, If-else .. заранее спасибо

Ответы [ 9 ]

8 голосов
/ 30 октября 2009

Как насчет этого:

if (x == 2) {
    flag = true;
}
if (y == 2) {
    flag = true;
}
if (flag) {
    // do something
}

Или это:

if ((x == 2) | (y == 2)) {
    // do something
}

Обратите внимание, что здесь используется оператор ИЛИ без короткого замыкания | вместо ||.

3 голосов
/ 30 октября 2009
temp = false;
if (x==2)
{
   doSomething();
   temp = true;
}
if (y==2)
{
   if (!temp)
       doSomething();
}

Это также может работать

if (x==2)
{
   doSomething();
}
else
{
   if (y==2)
       doSomething();
}
1 голос
/ 30 октября 2009

Как насчет:

if((x == 2) + (y == 2))
{
  do_something();
}

Он будет вести себя немного иначе, чем оператор ИЛИ, потому что оператор + не может выполнить оценку короткого замыкания.

Управление потоком программы будет таким же, хотя ..

1 голос
/ 30 октября 2009
if (!((x != 2) && (y != 2))) {
    work();
}
1 голос
/ 30 октября 2009

Разделить или явно:

if (x == 2) {
  ... do stuff 
} else if (y == 2) { 
  ... do the same stuff 
} else { 
  condition not fulfilled 
}

Теперь, без всего прочего ... Я знаю один «XML-род языка» с этим: XSL (T), в котором у вас есть <xsl:if>, но не очевидное <xsl:else>. Однако у вас есть более общий <xsl:choose>, который поддерживает несколько условий с использованием <xsl:when>, а также <xsl:otherwise> для выражения «других» случаев.

Итак, попробуйте поискать на «языке XML» своего рода, поддерживает ли он функциональность case / switch / select.

0 голосов
/ 30 октября 2009

Вы можете попробовать следующее:

if ((x == 2) && (x + y == 4)) {

} еще {

}

0 голосов
/ 30 октября 2009

Как насчет:

boolean doIt = (x == 2);

if (!doit) {
    doIt = (y == 2);
}

if (doIt) {

   // do something
}
0 голосов
/ 30 октября 2009

Поддерживает ли этот "язык XML типа" &&? Если это так, инвертируйте логику:

if ((x == 2) || (y == 2)) преобразуется в: if (!((x != 2) && (y != 2)))

0 голосов
/ 30 октября 2009

Единственное, о чем я могу думать, это повторять набор инструкций, выполненных или заданных для случая x == 2 и y == 2. Проблема здесь, кажется, исходит от языка, поскольку он должен по крайней мере поддерживать базовые логические операторы, чтобы его можно было использовать.

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...