Lua: различия между версиями
Patarakin (обсуждение | вклад) Нет описания правки |
Patarakin (обсуждение | вклад) Нет описания правки |
||
| (не показаны 32 промежуточные версии этого же участника) | |||
| Строка 1: | Строка 1: | ||
{{Карточка языка программирования | {{Карточка языка программирования | ||
|Description=Lua (лу́а, с порт. — «луна»— скриптовый язык программирования, разработанный в подразделении Tecgraf (Computer Graphics Technology Group) Католического университета Рио-де-Жанейро (Бразилия). Интерпретатор языка является свободно распространяемым, с открытым исходным кодом на языке программирования Си. По идеологии и реализации язык Lua ближе всего к JavaScript, в частности, он также реализует прототипную модель ООП, но отличается паскалеподобным синтаксисом и более мощными и гибкими конструкциями. Характерной особенностью Lua является реализация большого числа программных сущностей минимумом синтаксических средств. Так, все составные пользовательские типы данных (массивы, структуры, множества, очереди, списки) реализуются через механизм таблиц, а механизмы объектно-ориентированного программирования, включая множественное наследование — с использованием метатаблиц, которые также отвечают за перегрузку операций и ряд других возможностей. | |||
|FieldActivity=Computational Thinker | |FieldActivity=Computational Thinker | ||
|Programming paradigm=Функциональное программирование, Процедурное программирование | |||
|Возрастная категория=16 | |Возрастная категория=16 | ||
|Dimension=2D | |Dimension=2D | ||
| Строка 8: | Строка 10: | ||
|Address=http://www.lua.org/ | |Address=http://www.lua.org/ | ||
|Ancestors=Scheme | |Ancestors=Scheme | ||
|Descendants=JavaScript | |Descendants=JavaScript, Fennel | ||
|ActiveNow=Project is active | |ActiveNow=Project is active | ||
|Remixing=Да | |Remixing=Да | ||
| Строка 18: | Строка 20: | ||
|Remixing?=Yes | |Remixing?=Yes | ||
}} | }} | ||
Lua - скриптовый язык программирования используется для написания игр. Например, на Lua написан написан [[Foldit]] CoockBook, движок [[Roblox]] | |||
Внутри MediaWiki можно использовать скрипты-модули [[Lua]]. Надо научиться их встраивать. | |||
Внутри MediaWiki можно использовать скрипты-модули Lua. Надо научиться их встраивать. | |||
* https://zserge.wordpress.com/2012/02/23/lua-за-60-минут/ | * https://zserge.wordpress.com/2012/02/23/lua-за-60-минут/ | ||
| Строка 26: | Строка 29: | ||
---- | ---- | ||
=== [[Lua]] - [[Рекурсия]] === | |||
<syntaxhighlight lang="lua" line> | |||
local function func( n ) | |||
if n == 1 then return 1 | |||
else return n * func( n - 1 ) | |||
end | |||
end | |||
print( func( 5 ) ) | |||
</syntaxhighlight> | |||
----- | |||
=== Пример использования модуля Lua === | |||
<syntaxhighlight lang="lua" line> | |||
local p = {} --p stands for package | |||
function p.wbook( frame ) | |||
return "This is en example [[Active Essays]] on [[Lua]]" | |||
end | |||
return p | |||
</syntaxhighlight> | |||
{{#invoke:WikiBook|wbook}} | |||
=== Пример простейшего текстового генератора, который встраивает набор фраз в вики страницу === | |||
{{#invoke:SimpleGenerator|generateText}} | |||
; [[Модуль:SimpleGenerator]] | |||
{{#invoke:SimpleGenerator|generateText}} | |||
=== Представление внешних данных в виде таблиц и графов при помощи [[Graphviz]] === | |||
{{#invoke:ExtGraph|main|url=https://raw.githubusercontent.com/patarakin/stat-data/refs/heads/main/datasets/csv/digida_collab.csv|view=graph}} | |||
=== Пример 2 === | |||
; Вызов модуля, который возвращает цветные буквы текста (Латиница) | |||
{{#invoke:ColorAlphabet|letter|Colored text and something more}} | |||
=== Пример 3 === | |||
; Модуль возвращает гистограмму численности групп | |||
{{ #invoke:Chart | bar chart | |||
| height = 250 | |||
| width = 300 | |||
| stack = 1 | |||
| group 1 = 40 : 50 : 60 : 20 | |||
| group 2 = 20 : 60 : 12 : 44 | |||
| group 3 = 55 : 14 : 33 : 5 | |||
| colors = green : yellow : orange | |||
| group names = Учителя : Ученики : Роботы | |||
| units suffix = Количество | |||
| x legends = 09 : 10 : 11 : 11 | |||
}} | |||
=== 1 === | |||
{{ #invoke:Chart | bar chart | |||
| width = 800 | |||
| group 1 = 1500000 : 2500000 : 3500000 | |||
| group 2 = 200 : 5000 : 45000 | |||
| group 3 = 2000 : 5000 : 20000 | |||
| colors = red : blue : green | |||
| group names = People : Cars : Average car cost | |||
| x legends = 1920 : 1965 : 2002 | |||
| tooltip 2 = : There is no good data for number of cars in 1965. we use 5,000 as best estimate | |||
| units prefix = : : $ | |||
| scale per group = 1 | |||
}} | |||
== Lua - руководства == | |||
; https://habr.com/ru/articles/738414/ | |||
: Lua — "маленький язык", с низкой когнитивной нагрузкой и простотой в изучении и использовании. Он встроен во многое ПО, такое как Redis, NGINX через OpenResty и Wireshark. Он также используется в качестве скриптового языка в таких играх, как [[World of Warcraft]] и [[Roblox]] через [[Luau]] | |||
; https://www.mediawiki.org/wiki/Help:Lua/Lua_best_practice/ru | |||
: Lua в MediaWiki | |||
; https://en.wikibooks.org/wiki/Category:Book:Lua_Programming | |||
: Вики учебник | |||
; https://www.tutorialspoint.com/compilers/online-lua-compiler.htm | |||
: on-line | |||
== Lua подсказки == | |||
{{ | {{Lua clue}} | ||
Текущая версия от 20:19, 16 апреля 2026
| Краткое описание языка | Lua (лу́а, с порт. — «луна»— скриптовый язык программирования, разработанный в подразделении Tecgraf (Computer Graphics Technology Group) Католического университета Рио-де-Жанейро (Бразилия). Интерпретатор языка является свободно распространяемым, с открытым исходным кодом на языке программирования Си. По идеологии и реализации язык Lua ближе всего к JavaScript, в частности, он также реализует прототипную модель ООП, но отличается паскалеподобным синтаксисом и более мощными и гибкими конструкциями. Характерной особенностью Lua является реализация большого числа программных сущностей минимумом синтаксических средств. Так, все составные пользовательские типы данных (массивы, структуры, множества, очереди, списки) реализуются через механизм таблиц, а механизмы объектно-ориентированного программирования, включая множественное наследование — с использованием метатаблиц, которые также отвечают за перегрузку операций и ряд других возможностей. |
|---|---|
| Компетенции в каких сферах формирует | Computational Thinker |
| Парадигмы программирования | Функциональное программирование, Процедурное программирование |
| Возрастная категория | 16 |
| Назначение языка (Общее / Учебное) | Язык общего назначения |
| Visual_Text_Blocks | Текст |
| Измерение (2D/3D/Tangible) | 2D |
| Область знаний | |
| Открытость продукта | Открытый |
| Address | http://www.lua.org/ |
| Предки (Ancestors) | Scheme |
| Потомки (Descendants) | JavaScript, Fennel |
| Активность в данный момент | Project is active |
| Доступны ремиксы? | Да |
| Год создания | 1993 |
| Создатели | Селиш |
| Поясняющее видео | |
| Используется для создания мобильных приложений? | Да |
- Lua упоминается в свойствах следующих страниц
- How to Keep Score in a Game, How to connect Lua and C++, Learn2love, Lua/Таблица, Pathfinding, Sophie Nik, Алгоритмы и структуры данных (syllabus), Данные, Информационные системы (Syllabus), Информационные системы (Syllabus) 2025, Искусственный игровой интеллект, Как написать курсовую работу по программированию, Как проводить статистические вычисления в Lua, Как управлять поведением агентов на основании их пространственных характеристик, Мобильное приложение, Описательная статистика, Описать датасет при помощи описательной статистики, Программирование (syllabus) 2026, Программирование (математики и физики), Программирование на языках высокого уровня, Программный код, Процедурное программирование, Регулярные выражения, Рекурсия
Lua - скриптовый язык программирования используется для написания игр. Например, на Lua написан написан Foldit CoockBook, движок Roblox
Внутри MediaWiki можно использовать скрипты-модули Lua. Надо научиться их встраивать.
local function func( n )
if n == 1 then return 1
else return n * func( n - 1 )
end
end
print( func( 5 ) )
Пример использования модуля Lua
local p = {} --p stands for package
function p.wbook( frame )
return "This is en example [[Active Essays]] on [[Lua]]"
end
return p
This is en example Active Essay on Lua
Пример простейшего текстового генератора, который встраивает набор фраз в вики страницу
В гипертексте ... вместо линейного сюжета есть сеть пересекающихся отсылок. читатель выбирает свой путь от статьи к статье, как по ветвям гипертекста.
В гипертексте ... вместо линейного сюжета есть сеть пересекающихся отсылок. читатель выбирает свой путь от статьи к статье, как по ветвям гипертекста.
Представление внешних данных в виде таблиц и графов при помощи Graphviz
Ошибка загрузки данных:
Пример 2
- Вызов модуля, который возвращает цветные буквы текста (Латиница)
Пример 3
- Модуль возвращает гистограмму численности групп
- Учителя
- Ученики
- Роботы
1
- People
- Cars
- Average car cost
Lua - руководства
- https://habr.com/ru/articles/738414/
- Lua — "маленький язык", с низкой когнитивной нагрузкой и простотой в изучении и использовании. Он встроен во многое ПО, такое как Redis, NGINX через OpenResty и Wireshark. Он также используется в качестве скриптового языка в таких играх, как World of Warcraft и Roblox через Luau
- https://www.mediawiki.org/wiki/Help:Lua/Lua_best_practice/ru
- Lua в MediaWiki
- https://en.wikibooks.org/wiki/Category:Book:Lua_Programming
- Вики учебник
- https://www.tutorialspoint.com/compilers/online-lua-compiler.htm
- on-line
Lua подсказки
| Аффорданс / проблема | Решение (фрагмент кода Lua) |
|---|---|
|
1. Принять параметры из вики-страницы Студент хочет передать аргументы в модуль через {{#invoke:}} и получить что-то назад. |
local p = {}
function p.hello(frame)
local name = frame.args.name or "мир"
return "Привет, " .. name .. "!"
end
return p
Вызов: |
|
2. Построить wikitable из аргументов Вывести список данных в виде красивой таблицы прямо на странице. |
local p = {}
function p.table(frame)
local out = '{| class="wikitable"\n! №\n! Значение\n'
local i = 1
while frame.args[i] do
out = out .. "|-\n| " .. i .. " || " .. frame.args[i] .. "\n"
i = i + 1
end
return out .. "|}"
end
return p
Вызов: |
|
3. Прочитать содержимое wiki-страницы Нужно проанализировать текст другой страницы — посчитать слова, ссылки, заголовки. |
local p = {}
function p.words(frame)
local titleObj = mw.title.new(frame.args.title or "")
if not titleObj then return "Страница не найдена" end
local content = titleObj:getContent()
if not content then return "Нет содержимого" end
local n = 0
for _ in mw.ustring.gmatch(content, "%S+") do n = n + 1 end
return "Слов в исходном тексте: " .. n
end
return p
Вызов: |
|
4. Получить SMW-свойство страницы Нужно программно прочитать значение семантического свойства, записанного на странице. |
local p = {}
function p.getprop(frame)
if not mw.smw then return "mw.smw недоступен" end
local val = mw.smw.getPropertyValue(
frame.args.property or "Modification date"
)
if val == nil then return "(нет значения)" end
return tostring(val)
end
return p
Вызов: |
|
5. Выполнить #ask-запрос из Lua Нужно получить список страниц по SMW-запросу и обработать результаты программно. |
local p = {}
function p.ask(frame)
if not mw.smw then return "mw.smw недоступен" end
local results = mw.smw.ask("[[Категория:Модули]]|?#-=page|limit=5")
if not results then return "Нет результатов" end
local out = '{| class="wikitable"\n! Страница\n'
for _, row in ipairs(results) do
out = out .. "|-\n| " .. (row.page or "?") .. "\n"
end
return out .. "|}"
end
return p
Вызов: |
|
6. Записать SMW-свойство из Lua Нужно программно задать семантическое свойство страницы — например, при создании карточки. |
local p = {}
function p.setprop(frame)
if not mw.smw then return "mw.smw недоступен" end
local data = {
["Автор модуля"] = frame.args.author or "",
["Тип модуля"] = frame.args.type or "remix"
}
local result = mw.smw.set(data)
if result == true then
return "Свойства сохранены"
else
return "Ошибка: " .. (result.error or "неизвестная")
end
end
return p
Вызов: |
|
7. Вызвать парсер-функцию из Lua Нужно использовать |
local p = {}
function p.today(frame)
local date = frame:callParserFunction(
"#time", {"d F Y"}
)
return "Сегодня: " .. date
end
return p
Вызов: |
|
8. Загрузить внешний CSV и посчитать строки Нужно прочитать данные с GitHub или другого URL и агрегировать их. |
local p = {}
function p.rows(frame)
if not (mw.ext and mw.ext.externalData) then
return "Extension:External Data недоступен"
end
local url = frame.args.url or ""
if url == "" then return "Укажите url=" end
local data, errors = mw.ext.externalData.getExternalData{
source = url,
format = "csv with header"
}
if not data then return "Ошибка загрузки" end
return "Строк в CSV: " .. #data
end
return p
Вызов: |
|
9. Строка с Юникодом: считать буквы, не байты При подсчёте символов русского/японского текста стандартный |
local p = {}
function p.ulen(frame)
local text = frame.args.text or ""
local bytes = #text
local chars = mw.ustring.len(text)
return "Байт: " .. bytes .. " / Символов Unicode: " .. chars
end
return p
Вызов: |
|
10. Отдать HTML через mw.html Нужно сгенерировать сложный HTML-элемент (прогресс-бар, карточку) без конкатенации строк. |
local p = {}
function p.bar(frame)
local val = tonumber(frame.args[1]) or 0
val = math.max(0, math.min(100, val))
local wrap = mw.html.create("div")
:css("background", "#eee")
:css("border-radius", "4px")
:css("width", "200px")
wrap:tag("div")
:css("background", "#4caf50")
:css("width", val .. "%")
:css("padding", "3px 6px")
:css("color", "white")
:wikitext(val .. "%")
return tostring(wrap)
end
return p
Вызов: |
