Рубин 5 переменных областей:Разница между различными переменными прицелы в рубин
- Локальные переменные: это нормальные переменные, например,
x = 25
,y = gaurish
, гдеx
иy
являются локальными переменными. - Переменные экземпляра: они обозначаются символом
@
с именем фактической переменной. в основном используется с классами, так что каждый экземпляр/объект класса имеет другое/отдельное значение. пример.@employee.name = 'Alex'
- Переменные класса: обозначены символом
@@
перед именем переменной. class variable, я думаю, что имеет одинаковое значение для всех экземпляров/объектов. - Глобальные переменные: начинаются с
$
и доступны везде. пример$LOAD_PATH
- Константы: Необходимо начать с буквы Capital, но по соглашению, указанному в
ALL_CAPS
. хотя он постоянный, но его значение его не является постоянным и может быть изменено (хотя Ruby будет предупреждать об этом). поэтому в этом смысле это также действует как переменная.
Как вы можете заметить, все перечисленные выше являются переменными, которые хранят некоторое значение какого-либо типа, и их значение может быть изменено. Но каждая область делает что-то немного другое. Имея 5 разных типов переменных областей, я сбиваю с ума ад. В основном, я затрудняюсь решить, в каком случае, я должен использовать конкретный объем в моем коде. поэтому у меня есть некоторые вопросы в моем сознании. пожалуйста, ответьте:
- Я заметил, что локальные переменные и переменные класса остаются неизменными для всех объектов/экземпляров, в отличие от переменных экземпляра. так какая разница между локальными переменными и переменными класса?
- Могут ли вместо переменных класса использоваться локальные переменные? или наоборот. И если да, то почему, а если нет, то почему бы и нет?
- Глобальные переменные в рубине напоминают мне злые переменные
global $x
в PHP. Глобальные переменные в рубине также считаются злыми и поэтому не должны использоваться. ИЛИ, существуют конкретные случаи, когда имеет смысл использовать глобальные переменные в рубине? - Почему константы не являются константами и позволяют изменить их значение? Значение константы по определению должно быть постоянным? иначе мы можем просто использовать другую переменную и не изменять ее значение. это будет эквивалентно ПОСТОЯННЫМ в рубине?
- Любая страница/ресурс/ссылка, которая объясняет разницу между 5 различными областями переменных в рубине? Мне нравится держать его под рукой.
- В этом случае я должен использовать конкретный диапазон переменных в своем коде. поэтому можно было бы объяснить все 5 случаев, например, это было бы здорово, это моя основная причина путаницы.
- есть де-факто выбор, как
public
в java? Какой будет безопасная ставка в больше всего прецедентов?
Спасибо, что нашли время, чтобы прочитать и ответить на вопрос
Для первого пункта все объекты разделяют переменные уровня класса, каждый отдельный объект будет иметь свою собственную копию локальной переменной –
Если каждый отдельный объект будет иметь свою собственную копию локальной переменной, не являются локальными переменными, более похожими на переменные экземпляра тогда? – CuriousMind
Вид, я полагаю, вы могли видеть их таким образом. Переменные экземпляра _belong_ к экземпляру объекта и обычно составляют свойства этого объекта. Например, объект 'Person' может иметь две переменные экземпляра' @ first_name' и '@ last_name', он также может иметь локальную переменную' x', но 'x' не имеет отношения к состоянию объекта' Person' –