Различие между “или” и || в Ruby? [дубликат]

Этот вопрос уже имеет ответ здесь:

Каково различие между or и || операторы в Ruby? Или это - просто предпочтение?

169
задан Andrew Marshall 18 May 2012 в 06:08
поделиться

3 ответа

Хотите перенаправить стандартный вход и выход? Если да, то Console.SetIn (TextReader in) и Console.SetOut (TextWriter out) - это именно то, что требуется.

Что касается других методов, я почти уверен, что они все пройдут через mscorlib в какой-то момент. Если вы не можете себе этого позволить, вы можете написать свой собственный класс Console в конце концов.

-121--2420815-

Даже скомпилированное приложение может быть подделано. Если пользователь изменит системное время на полпути синхронизации, приложение сообщит серверу неверное время. только способ получить точное верхнее ограничение по времени, которое им требуется, состоит в запуске синхронизации на сервере, когда головоломка дается им, и в остановке синхронизации, когда они предоставляют ответ.

Как отметили другие, вы можете минимизировать эффект, который оказывают медленные соединения, делая нагрузку головоломки как можно меньшей. Сначала загрузите всю страницу и «игровой движок», а затем используйте асинхронный запрос для загрузки самой головоломки (которая должна быть небольшим количеством данных), чтобы максимально выровнять игровое поле.

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

(Рассуждение: 200 мс считается очень плохим запаздыванием, и это среднее время реакции человека. Самой короткой возможной «головоломкой» для человека будет визуальный тест скорости реакции, в этом случае плохое отставание будет иметь 100% разметку их результатов. Таким образом, в качестве временного решения это 2-OPT. На любую более сложную головоломку будет влиять меньшее отставание.)

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

-121--1306536-

Это вопрос приоритета оператора.

| | имеет более высокий приоритет, чем или .

Таким образом, между этими двумя операторами имеются другие операторы, включая троичные (?: ) и присваиваемые ( = ), так что выбранный оператор может повлиять на результат операторов.

Вот таблица приоритетов оператора ruby .

См. этот вопрос для другого примера с использованием и / & & .

Также имейте в виду некоторые неприятности, которые могут произойти:

a = false || true  #=> true
a  #=> true

a = false or true  #=> true
a  #=> false

Оба предыдущих утверждения оценивают как true , но вторые наборы a - false , поскольку = приоритет ниже | | , но выше или .

226
ответ дан 23 November 2019 в 20:51
поделиться

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

-14
ответ дан 23 November 2019 в 20:51
поделиться

Как уже объясняли другие, разница только заключается в приоритете.Однако я хотел бы отметить, что на самом деле есть два различия между ними:

  1. и , или и не имеют ] намного более низкий приоритет, чем && , || и !
  2. и и или имеют одинаковый приоритет, а && имеет более высокий приоритет, чем ||

В целом рекомендуется избегать использования и , или и , а не , а использовать && , || и ! вместо этого. (Разработчики ядра Rails, например, отвергают патчи, в которых используются формы ключевых слов вместо форм операторов.)

Причина, по которой они вообще существуют, не в логических формулах, а в потоке управления. Они проникли в Ruby через хорошо известную идиому Perl do_this или do_that , где do_this возвращает false или nil , если есть error и только тогда выполняется do_that . (Аналогично, есть также идиома do_this и then_do_that .)

Примеры:

download_file_via_fast_connection or download_via_slow_connection
download_latest_currency_rates and store_them_in_the_cache

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

Легко понять, почему в этом случае операторы имеют «неправильный» (то есть идентичный) приоритет: в любом случае они никогда не появляются вместе в одном выражении.И когда они действительно появляются вместе, вы обычно хотите, чтобы их оценивали просто слева направо.

76
ответ дан 23 November 2019 в 20:51
поделиться
Другие вопросы по тегам:

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