Использовать включить? вместо трекера - PullRequest
0 голосов
/ 13 сентября 2009
def add app
  @has_app[app] = true
  @apps << app
end

В код выше вместо использования

@has_app[app] = true 

чтобы отслеживать наличие приложения, мы также не можем сказать:

@apps.include? (app)

и покончить с @has_app?

Я пытаюсь понять, зачем здесь нужна эта отдельная переменная (?).

Ответы [ 3 ]

1 голос
/ 13 сентября 2009

Если это экстент кода, тогда да, вы можете просто использовать метод include?. Это избыточные данные. Возможно, однако, что этот хеш булевых значений имеет какое-то другое значение, которое не ясно из этих строк кода.

Там будет разница в производительности (для больших списков), так как поиск хеша быстрее, чем поиск массива при увеличении размера. (Вам необходимо дважды проверить специфику Ruby, если это важно).

1 голос
/ 13 сентября 2009

Методы с вопросительными знаками просто проверяют состояние переменной, а не модифицируют ее. Таким образом, @apps.include?(app) вернет либо true, либо false в зависимости от массива, имеющего данный объект.

0 голосов
/ 13 сентября 2009

Да, я согласен с вами. @has_app? это не обязательно. Единственная причина, по которой я могу подумать, почему оригинальный кодер использовал его, это ради производительности. Обратите внимание, что:

 @has_app is a Hash 
 @app is an Array.
Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...