Почему этот фрагмент кода выводит "true", когда он должен возвращать "false"? - PullRequest
4 голосов
/ 29 октября 2019
ALLOWED_TARGETS = ["dresden", "paris", "vienna"]

def missile_launch_allowed(target, secret_key)
  allowed = true
  аllowed = false if secret_key != 1234
  allowed = false unless ALLOWED_TARGETS.include?(target)
  allowed
end

puts(missile_launch_allowed("dresden", 9999))

Найден этот фрагмент кода в блоге. Отслеживание кода вручную дает мне false, но почему этот вывод верен при запуске?

Часть, которую я не вижу, просто не приходит мне в голову в данный момент. Пожалуйста, помогите мне лучше понять Ruby.

1 Ответ

8 голосов
/ 29 октября 2019

allowed не аllowed;у вас есть две разные переменные. В частности, первая буква отличается: первая переменная имеет «LATIN SMALL LETTER A» (U + 0061), вторая имеет «CYRILLIC SMALL LETTER A» (U + 0430). Глифы либо похожи, либо идентичны в большинстве (всех?) Шрифтов. Ваш код, таким образом, эквивалентен:

ALLOWED_TARGETS = ["dresden", "paris", "vienna"]

def missile_launch_allowed(target, secret_key)
  first = true
  second = false if secret_key != 1234
  first = false unless ALLOWED_TARGETS.include?(target)
  first
end

puts(missile_launch_allowed("dresden", 9999))

Если переменные переименованы несколько более разумно, должно быть очевидно, почему вы получаете именно тот результат, который вы получили.

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