Как оператор сравнения '==' работает с оператором 'if' кода ниже? - PullRequest
0 голосов
/ 10 апреля 2019

Как показано в методе ниже, я не понимаю, как работает «оператор сравнения». Если определенный «массив стека» изначально пуст, как можно сравнить элементы хеша «OPPOSITE» с последним элементом пустого массива? Производится ли сравнение с операндом «OPPOSITE [dir]»? Даже если это так, это все еще не ясно.

Спасибо

код:

 OPPOSITE = {
   "NORTH" => "SOUTH",
   "SOUTH" => "NORTH",
   "EAST"  => "WEST",
   "WEST"  => "EAST"
 }

def dirReduc(arr)
  stack = []

  arr.each do |dir|
    OPPOSITE[dir] == stack.last ? stack.pop : stack.push(dir)
  end

  stack
end 


 arr = ["NORTH", "SOUTH", "SOUTH", "EAST", "WEST", "NORTH", "WEST"]

 print dirReduc(arr)

1 Ответ

2 голосов
/ 10 апреля 2019

Если stack пуст, то stack.last вернет nil.

OPPOSITE['NORHT'] вернет 'SOUTH' и 'SOUTH' == nil, если false, поэтому ветвь else (stack.push(dir)) будет оценена.

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