Контекст
В языке Gentee отсутствуют глобальные переменные. Одним из способов обмена данными является специальный ассоциативный массив строк. Любая функция может безопасно добавлять туда пары ключ-значение или получать значение по ключу. Кроме этого, в контекст встроена возможность подстановки других существующих значений из контекста. Например, если определены пары "a": "String A" и "b": "String B", то "#a# and #b#" возвратит "String A and String B". Ниже описаны функции и операторы для работы с контекстом.

Операторы

Оператор
Результат
Описание
# ident
str
Тоже самое, что CtxGet(key), где ident является ключом контекста.
## str
str
Тоже самое, что Ctx(str). Указывается любое выражение, которое возвращает строку.
ident #= str
str
Тоже самое, что CtxSet(str key, str s), где ident - это ключ контекста.
ident #= bool
str
Тоже самое, что CtxSet(str key, bool b), где ident - это ключ контекста.
ident #= float
str
Тоже самое, что CtxSet(str key, float f), где ident - это ключ контекста.
ident #= int
str
Тоже самое, что CtxSet(str key, int i), где ident - это ключ контекста.
1
run str {
2
str s = ` #AºB#`
3
AºB #= `ººº`
4
b #= 71
5
CD #= `#AºB# #b# == `
6
return #CD + #b + ##s
7
}
8
// ººº 71 == 71 ººº
Copied!

Функции

Ctx(str input) str

Функция Ctx заменяет в строке input подстроки #keyname# на значение соответствующего ключа, если он существует.
1
run str {
2
CtxSetBool(`qq`, true)
3
CtxSetFloat(`ff`, 3.1415)
4
CtxSet(`out`, "it is #qq# that PI equals #ff#")
5
return Ctx("#out#. #notexist#")
6
}
7
// it is true that PI equals 3.1415. #notexist#
Copied!

CtxGet(str key) str

Функция CtxGet получает значение ключа key, заменяет в нём все вхождения других ключей и возвращает полученную строку. Если указанный ключ отсутствует, то возвратится пустая строка.
1
func init {
2
CtxSet(`a1`, `end`)
3
CtxSet(`a2`, `=#a1#=`)
4
CtxSet(`a3`, `+#a2#+#a1#`)
5
}
6
7
run str {
8
init()
9
return CtxGet(`a3`)
10
}
11
// +=end=+end
Copied!

CtxIs(str key) bool

Функция CtxIs возвращает true, если в контексте существует значение с указанным ключом. В противном случае, возвращается false.

CtxSet(str key, str val) str

Функция CtxSet добавляет ключ и значение в контекст. Если ключ уже существует, то ему будет присвоено новое значение. Функция возвращает присвоенное значение ключа.

CtxSet(str key, bool b) str

Функция CtxSet добавляет ключ и логическое значение b в контекст. Логическое значение будет преобразовано к строке true или false. Функция возвращает присвоенное значение ключа.

CtxSet(str key, float f) str

Функция CtxSet добавляет ключ и число с плавающей точкой f в контекст. Число будет преобразовано в строку. Функция возвращает присвоенное значение ключа.

CtxSet(str key, int i) str

Функция CtxSet добавляет ключ и целое число i в контекст. Число будет преобразовано в строку. Функция возвращает присвоенное значение ключа.

CtxValue(str key) str

Функция CtxValue возвращает значение ключа key как есть. В отличие от функции CtxGet, она не заменяет вхождения других ключей. Если указанный ключ отсутствует, то возвратится пустая строка.
1
run str {
2
CtxSet(`test`, `?value`)
3
CtxSet(`param`, `#test# ==`)
4
return CtxValue(`param`) + CtxValue(`nop`) + CtxGet(`param`)
5
}
6
// #test# ==?value ==
Copied!
Last modified 2yr ago