Я пару раз был укушен, забыв, что x = y
в Ruby заставляет x ссылаться на тот же объект, что и y; Я слишком привык к языкам, где в терминах Ruby это означает x = y.dup
. Забыв об этом, я непреднамеренно меняю y
, когда считаю, что это безопасно в правой части задания.
Я вижу, что было бы разумно избегать простых назначений x = y
без особой причины, но то же самое может скрываться и в других местах, таких как
name = (person.last_name.blank? ? 'unknown' : person.last_name)
где более поздний name << title
на самом деле изменил бы person.last_name, а не только имя.
Если это случилось и с вами, как вы научились этого избегать? Есть ли определенные красные флажки или закономерности, на которые следует обратить внимание? Вы с подозрением смотрите на каждое задание, которое делаете? Вы часто используете .dup
? Я не знаю, станет ли когда-нибудь использование Ruby моей второй натурой, поэтому буду рад любым полезным советам.
:=
для присваивания и=
для сравнения, интерпретируемый BASIC использует=
для обоих, Perl используетeq
для сравнения строк,==
для числового сравнения и=
для присваивания, и в основном вы должны держать их все прямо в голове. Вот почему так важно комментировать, писать чистый и понятный код; Достаточно сложно вернуться к коду, написанному месяцы или годы назад, а затем добавить другой язык с его уникальными особенностями... этого достаточно, чтобы заставить ваш мозг взорваться. - person the Tin Man   schedule 27.03.2011