В языке есть оператор :: который позволяет обращаться к какому-то
имени в пространстве других имён. Это похоже на такой же оператор в c++ но в Meta C это более мощный оператор.
Более подробно 4 2 Контракты и выбор#Оператор выбора
Пространство имён объявляется через символы ::
let a = 5;
::spaceOuter
{
::spaceInners
{
let a = 15;
}
int a = 10;
}
::spaceOuter::spaceInnersVer2
{
let a = 20;
}
print(a); // 5
print(spaceOuter::a); // 10
print(spaceOuter::spaceInner::a); // 15
print(spaceOuter::spaceInnersVer2) // 20
Можно перемещаться вверх по пространству имён.
print(spaceOuter::spaceInner::@::a); // 10
print(spaceOuter::spaceInner::@::@::a); // 5
::a
{
let v = 5;s
::b
{
let v = 10;
fn output()
{
let v = 15;
print(v); // 15
print(@::v); // 10
print(@::@::v;) // 5
}
}
}
Обращение к глобальной области видимости.
print(@@::a) // 5
print(@@::spaceOuter::a); // 10
print(@@::spaceOuter::spaceInner::a); // 15
Мы можем явно указать завершающую скобку.
::name_a
{
::name_b
{
let a;
}/::name
}/::name_a
::#A
{
let a;
::#B
{
let b;
}/::#A
let c;
}/::#B
a входит в A
b входит в A B
c входит в B
Это может быть использованно в сборке мусора и прочих штуках. Мы можем указать диапазон в котором работают умные указатели.
let ::a = 10;
let ::b = 20;
print(a);
print(b);
/::a;
/::b;
Переменная a уничтожится в /::a;