Глобальные переменные - это те, к которым можно получить доступ откуда угодно. Их область действия становится целым объектом main
. Это означает, что они могут использоваться где угодно в этой области, то есть где угодно в самом коде. Например,
module A
module B
class C
$glo = 'this is glo-bal variable'
end
end
end
module D
class E
CON = 'this is con-stant'
def call_glo
puts $glo
end
def call_con
puts CON
end
end
def self.call_con
puts CON
end
E.new.call_glo #=> "this is glo-bal variable"
end
D::E.new.call_glo #=> "this is glo-bal variable"
D::E.new.call_con #=> "this is con-stant"
D.call_con #=> Throws Error Unitialized Constant
Хотя константы ограничены областью, в которой они определены. Они могут использоваться только в той области, в которой они определены.
Теперь, как вы сказали, константы начинаются с прописные, следовательно, все имена классов и модулей сами по себе не что иное, как константы.
Теперь в приведенном выше примере вы видите, что метод call_glo
вызывается дважды. Однажды из области действия module D
, в то время как одна из области действия объекта main
, видите ли вы разницу между экземплярами class E
?
В module D
она вызывается без оператора области действия ::
в то время как за пределами модуля мы должны были использовать оператор области видимости, то есть ограничение области видимости. Константы связаны с.