Как делает саму ссылку на объект в Lua?

Для пользователей 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}

7
задан RBerteig 1 July 2009 в 06:07
поделиться

2 ответа

Из раздела 2.5.9 документации Lua ссылка на себя обычно self :

Синтаксис двоеточия используется для определения методов, то есть функции, которые имеют неявный дополнительный параметр self . Таким образом, оператор

 function tabc: f (params) body end

- синтаксический сахар для конца тела

 tabcf = function (self, params)
14
ответ дан 6 December 2019 в 06:14
поделиться

Как Грег уже указал , имя, которое вы ищете, - self .

Однако имейте в виду, что Lua не является ООП язык не более, чем чисто процедурный или функциональный язык. Он просто предоставляет все механизмы низкого уровня для реализации дизайна ООП. Один из принципов проектирования был выражен как «предоставить механизм, а не политику». Из-за этого нет возможности гарантировать, что среда, в которой вы работаете, даже использует наследование, или что вы можете найти родительский элемент для любого заданного объекта.

Было бы неплохо просмотреть разделы руководства Lua , Программирование на Lua и Wiki, которые относятся к функциям ООП:

10
ответ дан 6 December 2019 в 06:14
поделиться