Разница между областями видимости переменных в ruby ​​

Ruby имеет 5 областей видимости переменных:

  1. Локальные переменные:это нормальные переменные, например x = 25, y = gaurish, где xи y— локальные переменные.
  2. Переменные экземпляра:они обозначаются символом @перед фактическим именем переменной. в основном используется с классами, так что каждый экземпляр/объект класса имеет другое/отдельное значение. пример.@employee.name = 'Alex'
  3. Переменные класса:обозначается символами @@перед именем переменной. переменная класса, я думаю, что она имеет одинаковое значение для всех экземпляров/объектов.
  4. Глобальные переменные:они начинаются с символа $и доступны везде . пример$LOAD_PATH
  5. Константы:Должен начинаться с заглавной буквы, но по соглашению пишется в ALL_CAPS. хотя это константа, но ее значение непостоянно и может быть изменено, (ruby ​​выдаст предупреждение, хотя ). так что в этом смысле это также действует как переменная.

Как вы могли заметить, все вышеперечисленное является переменными, которые хранят некоторое значение определенного типа, и их значение может быть изменено. Но,каждый прицел делает что-то немного другое. Наличие 5 различных типов областей видимости меня чертовски смущает. В основном мне трудно решить, в каком случае я должен использовать конкретную область в своем коде. поэтому у меня есть некоторые вопросы в моей голове. пожалуйста ответьте:

  1. Я заметил, что локальные переменные и переменные класса остаются одинаковыми для всех объектов/экземпляров, в отличие от переменных экземпляра. так какая разница между локальными переменными и переменными класса?
  2. Можно ли использовать локальные переменные вместо переменных класса? или наоборот -. И если да, то почему, а если нет, то почему?
  3. Глобальные переменные в ruby ​​напоминают мне злые global $xпеременные в PHP. Глобальные переменные в ruby ​​также считаются злом и поэтому не должны использоваться. ИЛИ есть конкретные случаи, когда имеет смысл использовать глобальные переменные в ruby?
  4. Почему константы не являются константами и позволяют изменять их значение? Значение константы по определению должно быть постоянным, верно? в противном случае мы можем просто использовать другую переменную и не менять ее значение. будет ли это эквивалентно CONSTANT в рубине?
  5. Любая страница/ресурс/ссылка, которая объясняет разницу между 5 различными областями переменных в ruby? Мне нравится держать один под рукой для справки.
  6. В каком случае -я должен использовать в своем коде конкретную переменную. так что можно было бы объяснить все 5 случаев на примере can, это было бы круто, это моя главная причина путаницы.
  7. есть ли де-факто выбор, например publicв java? Какой вариант будет безопасным в большинстве случаев использования -?

Спасибо, что нашли время прочитать и ответить на вопрос

24
задан Justin Ohms 27 February 2015 в 17:32
поделиться