Для пользователей Python вы можете попробовать pyyaml-include .
pip install pyyaml-include
import yaml
from yamlinclude import YamlIncludeConstructor
YamlIncludeConstructor.add_to_loader_class(loader_class=yaml.FullLoader, base_dir='/your/conf/dir')
with open('0.yaml') as f:
data = yaml.load(f, Loader=yaml.FullLoader)
print(data)
Предположим, у нас есть такие файлы YAML :
├── 0.yaml
└── include.d
├── 1.yaml
└── 2.yaml
1.yaml
Содержимое]: name: "1"
2.yaml
Содержимое: name: "2"
На верхнем уровне:
Если 0.yaml
было:
!include include.d/1.yaml
Мы получим:
{"name": "1"}
В отображении:
Если 0.yaml
было:
file1: !include include.d/1.yaml
file2: !include include.d/2.yaml
Мы получим:
file1:
name: "1"
file2:
name: "2"
В последовательности:
Если 0.yaml
было:
files:
- !include include.d/1.yaml
- !include include.d/2.yaml
Мы получим:
files:
- name: "1"
- name: "2"
ℹ Примечание :
Имя файла может быть либо абсолютным (например,
/usr/conf/1.5/Make.yml
), либо относительным (например,../../cfg/img.yml
).
Имя файла может содержать подстановочные знаки в стиле оболочки. Данные, загруженные из файла (ов), найденных с помощью подстановочных знаков, будут установлены в последовательности.
Если 0.yaml
было:
files: !include include.d/*.yaml
Мы получим:
files:
- name: "1"
- name: "2"
ℹ Примечание :
- Для
Python>=3.5
, если аргументrecursive
тега!include
YAML равенtrue
, шаблон“**”
будет соответствовать любым файлам и нулю или более каталогов и подкаталогов.- Использование шаблона
“**”
в больших деревьях каталогов может потребовать чрезмерного количества времени из-за рекурсивного поиска.
Чтобы включить аргумент recursive
, мы напишем тег !include
в режиме Mapping
или Sequence
:
Sequence
режим: !include [tests/data/include.d/**/*.yaml, true]
Mapping
: !include {pathname: tests/data/include.d/**/*.yaml, recursive: true}
Из раздела 2.5.9 документации Lua ссылка на себя обычно self
:
Синтаксис двоеточия используется для определения методов, то есть функции, которые имеют неявный дополнительный параметр
self
. Таким образом, операторfunction tabc: f (params) body end
- синтаксический сахар для конца тела
tabcf = function (self, params)
Как Грег уже указал , имя, которое вы ищете, - self
.
Однако имейте в виду, что Lua не является ООП язык не более, чем чисто процедурный или функциональный язык. Он просто предоставляет все механизмы низкого уровня для реализации дизайна ООП. Один из принципов проектирования был выражен как «предоставить механизм, а не политику». Из-за этого нет возможности гарантировать, что среда, в которой вы работаете, даже использует наследование, или что вы можете найти родительский элемент для любого заданного объекта.
Было бы неплохо просмотреть разделы руководства Lua , Программирование на Lua и Wiki, которые относятся к функциям ООП: