== Оператор и операнды

Ваш вопрос немного неясен.

Является ли вопрос «как ограничить результаты поиска по категориям?»

Возможно, вы хотите установить категорию. Я считаю, что это будет работать

$query->set('cat', 123);

Или вы можете запросить налоговый запрос

$taxquery = array(
            'relation'=>'AND',
                array(
                    'taxonomy' => 'custom_cat',
                    'field' => 'term_id',
                    'terms' =>  array(123) ,
                )
            );
$query->set('tax_query', $taxquery);
5
задан Bill the Lizard 29 May 2010 в 20:59
поделиться

12 ответов

На большинстве языков это - то же самое.

Люди часто делают 1 == оцененное значение, потому что 1 не lvalue. Подразумевать, что Вы не можете случайно делать уроки.

Пример:

if(x = 6)//bug, but no compiling error
{
}

Вместо этого Вы могли вызвать ошибку компиляции вместо ошибки:

if(6 = x)//compiling error
{
}

Теперь, если x не имеет международного типа, и Вы используете что-то как C++, затем пользователь, возможно, создал оператор == (международное) переопределение, которое отвечает на этот вопрос к новому значению. 6 == x не скомпилировали бы в этом случае, но x == 6 будет.

17
ответ дан 18 December 2019 в 05:16
поделиться

Это зависит от языка программирования.

В Ruby, Smalltalk, Сам, Новояз, Ioke и много других языков объектно-ориентированного программирования единственной отправки, a == b на самом деле сообщение, отправляют. В Ruby, например, это эквивалентно a.==(b). То, что это означает, является этим, когда Вы пишете a == b, затем метод == в классе a выполняется, но когда Вы пишете b == a, затем метод в классе b выполняется. Так, это - очевидно, не то же самое:

class A; def ==(other) false end; end
class B; def ==(other) true  end; end

a, b = A.new, B.new

p a == b # => false
p b == a # => true
9
ответ дан 18 December 2019 в 05:16
поделиться

Нет, но последний синтаксис даст Вам ошибку компилятора, если Вы случайно введете

if (1 = evaluatedValue)

Обратите внимание, что сегодня любой достойный компилятор предупредит Вас, если Вы запишете

if (evaluatedValue = 1)

таким образом, это главным образом релевантно по историческим причинам.

5
ответ дан 18 December 2019 в 05:16
поделиться

Зависит от языка.

5
ответ дан 18 December 2019 в 05:16
поделиться

Это - то же самое

2
ответ дан 18 December 2019 в 05:16
поделиться

В Prolog или Erlang, == записан = и объединение, а не присвоение (Вы утверждаете, что значения равны, скорее затем тестируя это они равны или вынуждают их быть равными), таким образом, можно использовать его для утверждения, если левая сторона является константой, как объяснено здесь.

Так X = 3 объединил бы переменную X и значение 3, тогда как 3 = X попытался бы объединить константу 3 с текущим значением X, и будьте эквивалентны из assert(x==3) на императивных языках.

3
ответ дан 18 December 2019 в 05:16
поделиться

В целом едва имеет значение, используете ли Вы, Оцененное значение == 1 ИЛИ 1 == оцененное значение.

Используйте, какой бы ни кажется более читаемым Вам. Я предпочитаю, если (Оцененное значение == 1), потому что это выглядит более читаемым мне.

И снова, я хотел бы заключить известный сценарий в кавычки сравнения строк в Java. Рассмотрите String str, которой необходимо соответствовать, говорит другая строка "SomeString".

str = getValueFromSomeRoutine();

Теперь во времени выполнения, Вы не уверены, была ли ул. ПУСТОЙ. Таким образом для предотвращения исключения Вы запишете

if(str!=NULL)
{
   if(str.equals("SomeString")
   {
      //do stuff
    }
}

для предотвращения внешней пустой проверки, Вы могли просто записать

if ("SomeString".equals(str))
{
   //do stuff
}

Хотя это менее читаемо, который снова зависит от контекста, это сохраняет Вас дополнительное если.

2
ответ дан 18 December 2019 в 05:16
поделиться
if value == 1
if 1 == value

Точно то же, но если Вы случайно делаете

if value = 1
if 1 = value

Первый будет работать, в то время как 2-й произведет ошибку.

0
ответ дан 18 December 2019 в 05:16
поделиться

Иногда в C++ они делают разные вещи, если оцененное значение является пользовательским типом, и оператор == определяется.Плохо.

Но это - очень редко причина, любой выбрал бы один путь вокруг по другому: если оператор == не является коммутативным/симметричным, включая то, если тип значения имеет преобразование из интервала, то у Вас есть проблема, которая, вероятно, хочет фиксировать вместо того, чтобы работать вокруг. Ответ Brian R. Bondy и другие, находятся, вероятно, на метке того, почему любой волнуется об этом на практике.

Но факт остается, что, даже если оператор == является коммутативным, компилятор не мог бы сделать точно того же самого в каждом случае. Это (по определению) возвратит тот же результат, но это могло бы сделать вещи в немного отличающемся порядке, или что бы то ни было.

1
ответ дан 18 December 2019 в 05:16
поделиться

Поскольку это и подобные вопросы могут я предлагать, чтобы Вы узнали для себя путем написания небольшого кода, выполнения его через компилятор и просмотра испускаемого ассемблерного вывода.

Например, для компиляторов GNU, Вы делаете это с флагом-S. Для компиляторов VS самый удобный маршрут должен выполнить Вашу тестовую программу в отладчике и затем использовать assembeler представление отладчика.

1
ответ дан 18 December 2019 в 05:16
поделиться

Они - то же. Некоторые люди предпочитают помещать первый 1, освобождать случайно попадение в прерывание ввода

 evaluated value = 1

который мог быть болезненным, если значение на левой стороне является присваиваемым. Это - общий "защитный" шаблон в C, например.

0
ответ дан 18 December 2019 в 05:16
поделиться

На языках C распространено поместить постоянное или магическое число сначала так, чтобы, если Вы забываете один из "=" проверки равенства (==) затем компилятор не интерпретирует это как присвоение.

В Java Вы не можете делать уроки в булевом выражении, и таким образом, для Java, это не важно, которые приказывают, чтобы операнды равенства были записаны в; компилятор должен отметить ошибку так или иначе.

0
ответ дан 18 December 2019 в 05:16
поделиться
Другие вопросы по тегам:

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