Сообщение Re[5]: пространства имён от 18.10.2023 19:53
Изменено 18.10.2023 19:54 Sm0ke
Re[5]: пространства имён
some tips | |
| |
Здравствуйте, netch80
Наконец появилась минутка, чтобы ответить по вопросу namespace
| В си++ можно в разных местах открыть начало пространства имён, что-то в нём определить, а потом закрыть.
| И так несколько раз для того-же имени namespace -а можно повторно открывать в разных файлах.
В кси всё лежит в ячейках. У ячейки есть имя, и принадлежность.
К примеру ячейка модуля принадлежит модулю
Имя модуля начинается с собачки
| На примере ui либы это может выглядить так:
В модуле @main ячейка нэймспэйса с именем ui
-- file: ui-colors.ksi
@main
ui = #nest (
colors
)
ui.colors = #nest (
red = 0h_ff_00_00
white = 0h_ff_ff_ff
)
do = {
&write_line( ui.colors.red )
}
Команда #nest формирует и возвращает новый тип, со статическими свойствами.
Это можно использовать как пространство имён.
Вы писали:
Конечно они могут быть вложенными.Если хочется чего-то выше уровня песочницы — понадобятся, иерархические.
Вначале был указан список ячеек в нэсте ui
В этом списке пока только colors
Который тоже nest
Начальное значение для colors вынесено отделньно за скобку
Но могло быть и внутри, как у ячейки ui.colors.red
--
Добавим в nest ui ещё типы: coords, color
Через команду #add_nest
-- file: ui-types.ksi
@main
ui #add_nest (
coords
color
)
ui.coords = #struct ( x y )
ui.color = #struct ( r g b )
-- usage:
test_types = {
pos = ui.coords(2, 2)
clr = ui.color(200, 200, 200)
}
В том-же файле, или в отдельном — не так важно.
--
Через #add_nest можно статики добавлять и к структуре тоже
-- file: ui-color-actions.ksi
@main
ui.color #add_nest (
from_code
)
ui.color.from_code = #fn ($int: code)
{
#ret = ui.color(/* битовые вычисления */)
}
-- usage:
test_color = {
clr = ui.color.from_code( ui.colors.white )
clr_code = (
clr !to_code
)
( clr_code <> ui.colors.white ) #then { /* log: test_failed */ }
}
Метод to_code для типа ui.color в этом примере не определён.
Синтаксис для добавления методов — в отдельном reply запланирован)
вы спрашивали | |
Через восклицательный знак — это вызов метода cell !method cell !method(params) Через точку — доступ к свойству cell.property Через стрелочку — доступ к атрибуту cell->attr так имена у метода, свойства и атрибута могут совпадать, и не возникнет ambiguity | |
--
Попытка через круглые скобки создать экземпляр из типа, который сформирован командой #nest, вернёт тот-же тип.
do {
-- attempt to make nest instance:
var = ui.colors()
-- type of nest instance:
type = var$
-- ... and nest itself
( type == ui.colors ) #then { &write("same") }
-- is the same thing
-- but type of nest:
ui.colors$ == $type -- ui.colors is type
-- is $type
}
Тут var$ — это способ узнать тип
--
На случай если разработчик кси библиотеки захочет запретить добавлять в свой nest дополнительные статик свойства через #add_nest,
то можно ввести команду #nest_once (или как её лучше назвать?)
@some_lib
my_nest = #nest_once ( a b c )
my_nest #add_nest () -- ошибка!
Но может быть вы предложите вообще запретить через #add_nest добавлять статики именно в #nest ?
Чтобы весь перечень статик ячеек был всегда в одном месте ... И не пришлось бы их искать по разным файлам
Как считаете, добавлять статики в структуру, в перечисление, и даже в функцию — хорошая идея?
* всё той-же командой #add_nest
Re[5]: пространства имён
some tips | |
| |
Здравствуйте, netch80
Наконец появилась "минутка", чтобы ответить по вопросу namespace
| В си++ можно в разных местах открыть начало пространства имён, что-то в нём определить, а потом закрыть.
| И так несколько раз для того-же имени namespace -а можно повторно открывать в разных файлах.
В кси всё лежит в ячейках. У ячейки есть имя, и принадлежность.
К примеру ячейка модуля принадлежит модулю
Имя модуля начинается с собачки
| На примере ui либы это может выглядить так:
В модуле @main ячейка нэймспэйса с именем ui
-- file: ui-colors.ksi
@main
ui = #nest (
colors
)
ui.colors = #nest (
red = 0h_ff_00_00
white = 0h_ff_ff_ff
)
do = {
&write_line( ui.colors.red )
}
Команда #nest формирует и возвращает новый тип, со статическими свойствами.
Это можно использовать как пространство имён.
Вы писали:
Конечно они могут быть вложенными.Если хочется чего-то выше уровня песочницы — понадобятся, иерархические.
Вначале был указан список ячеек в нэсте ui
В этом списке пока только colors
Который тоже nest
Начальное значение для colors вынесено отделньно за скобку
Но могло быть и внутри, как у ячейки ui.colors.red
--
Добавим в nest ui ещё типы: coords, color
Через команду #add_nest
-- file: ui-types.ksi
@main
ui #add_nest (
coords
color
)
ui.coords = #struct ( x y )
ui.color = #struct ( r g b )
-- usage:
test_types = {
pos = ui.coords(2, 2)
clr = ui.color(200, 200, 200)
}
В том-же файле, или в отдельном — не так важно.
--
Через #add_nest можно статики добавлять и к структуре тоже
-- file: ui-color-actions.ksi
@main
ui.color #add_nest (
from_code
)
ui.color.from_code = #fn ($int: code)
{
#ret = ui.color(/* битовые вычисления */)
}
-- usage:
test_color = {
clr = ui.color.from_code( ui.colors.white )
clr_code = (
clr !to_code
)
( clr_code <> ui.colors.white ) #then { /* log: test_failed */ }
}
Метод to_code для типа ui.color в этом примере не определён.
Синтаксис для добавления методов — в отдельном reply запланирован)
вы спрашивали | |
Через восклицательный знак — это вызов метода cell !method cell !method(params) Через точку — доступ к свойству cell.property Через стрелочку — доступ к атрибуту cell->attr так имена у метода, свойства и атрибута могут совпадать, и не возникнет ambiguity | |
--
Попытка через круглые скобки создать экземпляр из типа, который сформирован командой #nest, вернёт тот-же тип.
do {
-- attempt to make nest instance:
var = ui.colors()
-- type of nest instance:
type = var$
-- ... and nest itself
( type == ui.colors ) #then { &write("same") }
-- is the same thing
-- but type of nest:
ui.colors$ == $type -- ui.colors is type
-- is $type
}
Тут var$ — это способ узнать тип
--
На случай если разработчик кси библиотеки захочет запретить добавлять в свой nest дополнительные статик свойства через #add_nest,
то можно ввести команду #nest_once (или как её лучше назвать?)
@some_lib
my_nest = #nest_once ( a b c )
my_nest #add_nest () -- ошибка!
Но может быть вы предложите вообще запретить через #add_nest добавлять статики именно в #nest ?
Чтобы весь перечень статик ячеек был всегда в одном месте ... И не пришлось бы их искать по разным файлам
Как считаете, добавлять статики в структуру, в перечисление, и даже в функцию — хорошая идея?
* всё той-же командой #add_nest