Lua는 때때로 C++와 같은 컴파일된 언어로 작성된 응용 프로그램을 스크립팅하기 위해 내장될 수 있는 도구인 반언어로 잘 정립된 평판을 가지고 있습니다. 그럼에도 불구하고 Lua는 자체 인터프리터, 모듈 생성 기능, 큰 숫자라이브러리와 동시에 이 PL은 아날로그 중 최소 크기를 가지고 있습니다. 간단히 말해서, 우리는 perl, python 및 일반적으로 다른 일반적인 프로그래밍 언어에서와 동일한 응용 프로그램을 만들 수 있는 모든 것을 갖추고 있습니다.

Lua에 대해 다음과 같은 이유를 제시할 수 있습니다.

  • - 응용 프로그램은 Windows와 Linux 간에 쉽게 이식할 수 있습니다.
  • - 생성된 프로그램의 작은 오버헤드
  • - 고속작업 및 응용 프로그램 다운로드
  • - 모든 C 라이브러리를 애플리케이션에 빠르게 "접착"하는 기능 - 라이브러리에 더 나은 "접착제"를 찾을 수 없습니다.
  • - 최신 프로그래밍 패러다임을 구현할 수 있는 언어의 멋진 최소한의 구문
  • - Lua 프로그램은 배포하기가 매우 쉽습니다.
  • - 낮은 메모리 소비

Lua의 힘을 보여주기 위해 Lua를 사용하여 생성하는 방법을 보여 드리겠습니다. 작은 프로그램그래프를 이미지 파일로 저장할 수 있는 기능을 사용하여 점별로 그래프를 작성합니다.

그래픽 툴킷으로 우리는 iup을 사용할 것입니다. 크로스 플랫폼 라이브러리는 원래 Lua에서 사용할 것을 예상하여 만든 것입니다.

루아 SDK 설치
Lua를 독립적인 프로그래밍 언어로 사용한다는 아이디어의 일환으로 Lua for Windows 어셈블리가 만들어졌습니다. 여기에는 지정된 OS에 대해 프로그래밍할 때 발생하는 일상적인 작업(데이터베이스 작업, GUI, XML 파싱)에 필요한 라이브러리가 포함되어 있습니다. , 등. Lua의 버전이 5.2가 아니라 어셈블리 5.1에 있다는 사실을 당황하지 마십시오. 우리의 경우에는 그들 사이에 큰 차이가 없습니다.

빌드를 다운로드하여 설치합니다.

iup 개념에 대한 간략한 설명
iup 장치에 대해 자세히 설명하지 않고 프로그램을 만드는 과정을 설명하는 방법을 오랫동안 생각했습니다. 그리고 나는 그 주요 원칙을 간략하게 설명하기로 결정했습니다.
  • - iup.dialog는 프로그램 인터페이스의 루트 요소입니다. - 모든 요소는 이 컨테이너에 배치됩니다.
  • - 컨테이너의 요소 배치는 레이아웃을 사용하여 수행됩니다. 컨테이너에 요소를 배치하기 위한 규칙을 설정합니다. Iup 자체는 규칙에 따라 요소를 배치하고 그립니다. 주요 컨테이너는 프레임, 수직 사이저, 수평 사이저입니다.
  • - 이벤트 핸들러는 위젯에 연결된 기능으로 설정됩니다.
  • - 대화 상자가 생성된 후 이벤트 루프가 시작됩니다.
이전에 Tk, WxWidgets 또는 WinAPI로 GUI용으로 작성한 적이 있다면 이 모든 것이 친숙하게 들릴 것입니다. 그렇지 않은 경우 프로그램은 주석과 함께 자세히 설명됩니다.
프로그램 코드

라이브러리 포함 iup require("iuplua") require("iupluacontrols") require("iuplua_pplot") -- 그래프를 파일에 저장하기 위해 Canvas 작업을 위한 라이브러리 require("cdlua") require("iupluacd") require(" string ") -- 위젯 및 프로그램 설정에 대한 전역 변수 -- 최대 플롯 수 plots_number = 5 -- 각 플롯에 대한 데이터 입력 위젯이 배치될 탭 위젯 tabs = () -- 위젯 컨테이너 vboxes = () -- 체크박스 체크박스를 빌드할 플롯 선택 = () -- 포인트에 대한 텍스트 데이터가 있는 위젯을 저장합니다. coords = () -- 각 플롯 범례에 대한 레이블 위젯 = () -- 좌표축 지정을 위한 위젯 global_legend = () -- 가장 부끄럽게도 표준 Lua 분할 함수가 없습니다. string:split(sep) local sep, fields = sep 또는 ":", () local pattern = string.format("([^%s]+)", sep ) self:gsub (pattern, function(c) fields[#fields+1] = c end) return fields end -- 이 함수는 플로터의 지정된 지점에서 그래프를 그립니다. ion draw_plot(pwidget, pnum, data) x = data.value:split(",") y = data.value:split(",") if checkeds.value == "(!LANG:OFF" then return end if not (#x == #y) or #x == 0 then iup.Message("Ошибка", "Задано неверное число точек для графика " .. pnum) return end iup.PPlotBegin(pwidget, 0) iup.PPlotAdd(pwidget, 0, 0) for i = 1,#x do iup.PPlotAdd(pwidget, x[i], y[i]) end iup.PPlotEnd(pwidget) end -- виджет отвечающий за кнопку построения графика plot_btn = iup.button{ title = "짓다"} -- колбэк для кнопки "построить график" function plot_btn:action() -- создать виджет графопостроителя plot = iup.pplot { expand="YES", TITLE = "단순한 선", MARGINBOTTOM="65", MARGINLEFT="65", AXS_XLABEL = global_legend.value, AXS_YLABEL = global_legend.value, LEGENDSHOW="YES", LEGENDPOS="TOPLEFT", size = "400x300" } -- этот блок для обхода бага - без него подпись к первому графику отображаться не будет iup.PPlotBegin(plot, 0) iup.PPlotAdd(plot,0,0) plot.DS_LEGEND = "" iup.PPlotEnd(plot) -- обходим виджеты с данными for i = 1, plots_number do -- чтобы свеженарисованный графи отобразился с правильной подписью print(legends[i].value) plot.DS_LEGEND = legends[i].value -- рисуем график draw_plot(plot, i, coords[i]) end -- кнопка сохранения графика в картинку на диске save_btn = iup.button{ title = "구하다" } -- теперь создаем само окно, где будет отображаться график plot_dg = iup.dialog { iup.vbox -- это вертикальный сайзер, помести в него графопостроитель и кнопку { plot, save_btn }, } -- обработчик кнопки сохранения графика function save_btn:action() -- создаем диалог выбора имени файла ля сохранения -- в связи с ограничениями библиотеки сохранять можно только в EMF fs_dlg = iup.filedlg{DIALOGTYPE = "SAVE", FILTER = "*.emf" } iup.Popup(fs_dlg) -- если файл выбран if tonumber(fs_dlg.STATUS) >= 0 then -- дописать при необходимости !} 원하는 확장 pic = fs_dlg.value if not (string.sub(pic, string.len(pic)-3) == ".emf") then pic = pic .. ".emf" end -- 파일과 연결된 의사 캔버스 생성 tmp_cv = cd.CreateCanvas(cd.EMF, pic .. " 400x300") -- 캔버스에 플로팅 iup.PPlotPaintTo(plot, tmp_cv) -- 데이터를 파일에 저장 cd.KillCanvas(tmp_cv) end end -- plot_dg 대화상자 표시: showxy(iup.CENTER, iup.CENTER) -- 대화 상자에 대한 이벤트 루프 실행 if (iup.MainLoopLevel()==0) then iup.MainLoop() end end -- 루프에서 탭을 생성하여 배치할 탭을 만듭니다. widgets -- i=1,plots_number에 대한 데이터를 수집하려면 -- 점의 좌표가 입력될 텍스트 위젯을 만듭니다. coords[i] = () for j = 1,2 do coords[i][j] = iup .text ( expand="HORIZONTAL", multiline = "YES", VISIBLELINES = 5 ) end -- 차트 캡션 범례 편집용 위젯[i] = iup.text( expand = "HORIZONTAL" ) -- 탭 컨테이너를 만들고 요소 vbox를 채웁니다. [i] = iup.vbox ( 나는 up.hbox ( iup.label ( 제목 = "(!LANG:그래프 레이블:" }, legends[i] }, iup.hbox { iup.label { title="엑스:", }, coords[i] }, iup.hbox { iup.label { title="와이:", }, coords[i] }; expand="YES", } -- меняем заголовк вкладки vboxes[i].tabtitle = "일정" .. i -- создаем чекбокс, который будет указывать на то, нужно ли строить -- график по данным из указанной вкладки checkboxes[i] = iup.toggle{ title= "일정" .. i, value = "켜짐" } end -- теперь из заполненных нами контейнеров создаем вкладки tabs = iup.tabs{unpack(vboxes)} -- создаем текстовые виджеты для редактирования подписей осей global_legend = iup.text{} global_legend = iup.text{} -- создаем фрейм для !} 일반 설정그래픽 프레임 = iup.frame ( iup.vbox ( iup.label( title="(!LANG:사용 데이터:", expand="HORIZONTAL" }, iup.vbox { unpack(checkboxes) }, iup.label{}, -- пустую подпись можно использовать как распорку iup.label{title = "서명"}, iup.hbox { iup.label{ title = "X축"}, global_legend }, iup.hbox { iup.label{ title = "Y축"}, global_legend }, iup.label{}, plot_btn }; expand = "VERTICAL", } -- создаем главное окно программы и наносим на него настройки и табы dg = iup.dialog { iup.hbox { frame, tabs }, title="그래프 작성", size = "HALF" } -- показываем главное окно и запускаем обработку событий dg:showxy(iup.CENTER, iup.CENTER) if (iup.MainLoopLevel()==0) then iup.MainLoop() end !}

배포에 대한 몇 마디
스크립트는 다음 명령으로 실행할 수 있습니다.

루아플로터.exe

이 경우 라이브러리는 Windows용 Lua가 설치된 디렉토리에 있는 clibs/ 하위 디렉토리에 포함됩니다. 스크립트와 라이브러리를 가능한 한 압축하여 다른 시스템으로 전송하려면 다음 파일을 하나의 폴더에 복사하면 됩니다(Lua 설치 디렉터리의 상대 경로로 표시됨).

Lua.exe lib/lua5.1.dll clibs/cd.dll clibs/cdlua51.dll clibs/iup.dll clibs/iup_pplot.dll clibs/iupcd.dll clibs/iupcontrols.dll clibs/iupgl.dll clibs/iuplua51.dll clibs/iuplua_pplot51.dll clibs/iupluacd51.dll clibs/iupluacontrols51.dll clibs/freetype6.dll

이 폴더에 프로그램과 함께 스크립트를 저장하는 것을 잊지 마십시오. 이제 이 폴더를 다른 컴퓨터로 전송하고 위의 명령으로 프로그램을 실행할 수 있습니다. 이 경우 라이브러리 및 런타임을 설치하는 다른 단계가 필요하지 않습니다.

안타깝게도 이 버전의 Windows용 Lua에서는 cd.dll, cdluad51.dll, iupcd.dll 파일이 제대로 작동하지 않을 수 있으므로 아래 링크를 통해 아카이브에서 가져오기를 권장합니다.

결과
작업 버전으로 아카이브, 편의를 위해 app.bat 런처가 추가되었습니다.

스크린샷:

결과적으로 우리는 "진지한" 프로그래밍 언어로 작성된 것과 같은 기능을 가진, 비록 서툴기는 하지만 유틸리티를 얻었습니다. 동시에 배포하기 쉽고 총 중량이 2MB 미만입니다. 메모리 소비 - 약 7MB. 소스 코드는 편집 가능하고 Lua 자체는 대화식으로 이해할 수 있어 현장에서 이러한 소프트웨어 개발을 단순화합니다.

제 생각에 이것은 학교 및 기관을 위한 교육 소프트웨어를 작성하고 기업 내부에서 사용하기에 탁월한 선택입니다. 취약한 시스템이 CIS 전체의 유사한 위치에 여전히 많기 때문에 이러한 방식으로 Lua를 사용하는 것이 합리적입니다. 또한 버그가 심한 자체 작성 소프트웨어의 소스 코드를 잃어 버리는 경향은 국가 재난과 동일시 될 수 있습니다.

태그: 태그 추가

LUA 플러그인 - 다음으로 작성된 일부 모드에 필요 스크립트 후크 GTA 5용 V.

Lua는 브라질 리우데자네이루 가톨릭 대학교의 Tecgraf(컴퓨터 그래픽 기술 그룹) 부서에서 개발한 스크립팅 프로그래밍 언어입니다. 언어 인터프리터는 C 언어로 된 무료로 배포되는 오픈 소스입니다.

기능, 이데올로기 및 구현 측면에서 언어는 JavaScript에 가장 가깝지만 Lua는 더 강력하고 훨씬 유연한 구조를 가지고 있습니다. Lua는 클래스와 객체의 개념을 명시적으로 포함하지 않지만 다중 상속을 포함한 객체 지향 프로그래밍 메커니즘은 연산자 오버로딩 등을 담당하는 메타테이블을 사용하여 쉽게 구현됩니다. 구현된 객체 지향 프로그래밍 모델은 프로토타입(예: 자바스크립트).

스크립트 후크 V용 LUA 플러그인

언어는 복제 가능한 것을 만드는 데 널리 사용됩니다. 소프트웨어(예를 들어, GUI 어도비 패키지라이트룸). 또한 임베딩의 용이성, 코드 실행 속도 및 학습 용이성으로 인해 많은 게임(월드 오브 워크래프트 포함)에서 레벨 및 확장을 위한 프로그래밍 언어로 인기를 얻었습니다.

설치하는 방법

  1. 설치가 필요합니다
  2. 그런 다음 아카이브(폴더 포함)의 모든 파일을 루트 폴더 GTA 5.
  3. 앞으로 LUA의 스크립트는 "/scripts/addins" 폴더에 로드됩니다.

Windows용 Lua(LfW)는 브라질 리우데자네이루의 교황청 가톨릭 대학 컴퓨터 그래픽 기술 그룹의 Tecgraf 부서에서 개발한 해석형 프로그래밍 언어입니다. 개발된 인터프리터는 C 언어의 오픈 소스 텍스트와 함께 무료로 배포됩니다.

기능, 이데올로기 및 구현 측면에서 언어는 JavaScript에 가장 가깝지만 Lua는 더 강력하고 훨씬 유연한 구조를 가지고 있습니다. Lua는 클래스와 객체의 개념을 명시적으로 포함하지 않지만 다중 상속을 포함한 객체 지향 프로그래밍 메커니즘은 연산자 오버로딩 등을 담당하는 메타테이블을 사용하여 쉽게 구현됩니다. 구현된 객체 지향 프로그래밍 모델은 프로토타입입니다(예: 그리고 자바스크립트에서).

이 언어는 복제된 소프트웨어를 만드는 데 널리 사용됩니다. 특히 패키지의 그래픽 인터페이스가 여기에 기록됩니다. 어도비 포토샵라이트룸. 또한 임베딩의 용이성, 코드 실행 속도 및 학습 용이성으로 인해 많은 게임(예: World of Warcraft)의 레벨 및 확장을 위한 프로그래밍 언어로 명성을 얻었습니다.

Lua는 일반적으로 다중 패러다임 언어라고 합니다. 단일 패러다임에서 프로그래밍을 보장하는 복잡한 엄격한 사양 세트가 아니라 다양한 문제를 해결하기 위해 확장할 수 있는 작은 기본 메커니즘 세트를 제공합니다.

예를 들어 Lua에는 상속에 대한 명시적인 지원이 없지만 메타테이블을 사용하여 쉽게 구현됩니다.

- 확장자(형식)는 파일의 마지막 점 뒤의 문자입니다.
- 컴퓨터는 확장자에 따라 파일 형식을 정확하게 결정합니다.
- 에 의해 윈도우 기본값파일 이름 확장자를 표시하지 않습니다.
- 파일명 및 확장자에 일부 문자는 사용할 수 없습니다.
- 모든 형식이 동일한 프로그램과 관련된 것은 아닙니다.
- 아래는 LUA 파일을 열 수 있는 모든 프로그램입니다.

많은 MS Windows 사용자는 표준 메모장이 사용하기 다소 불편한 프로그램이라는 것을 오랫동안 알고 있었습니다. 이것은 교체가 될 수 있습니다 무료 편집기 텍스트 파일, 많은 프로그래밍 언어에 대한 구문 지원을 제공합니다. 이 프로그램에는 상당히 다양한 옵션이 포함되어 있으며 프로세서 리소스를 최소한으로 사용하는 것이 특징입니다. 이 프로그램을 사용하면 한 번에 여러 문서를 동시에 보고 불필요한 창을 닫지 않고 편집할 수 있습니다. 동일한 문서를 편집하는 것과 같은 옵션도 사용할 수 있게 되었습니다. 다른 장소들그것은 매우 편리합니다 ...

Notepad2는 텍스트를 입력하고 편집할 수 있는 간단한 응용 프로그램입니다. 코드를 강조 표시할 수 있으므로 HTML 페이지 생성, 다양한 언어(CSS, Java, JavaScript, Python, SQL, Perl, PHP)로 프로그래밍하는 데 도움이 됩니다. 이 프로그램은 간단한 메모장 원리를 기반으로 하며 가볍고 컴팩트합니다. 이 텍스트 편집기는 쌍에 대한 모든 괄호를 확인하고 자동 들여쓰기를 지원합니다. Notepad2는 ASCII 및 UTF-8 인코딩을 지원할 뿐만 아니라 변환하는 방법도 알고 있습니다. 원치 않는 작업을 여러 수준으로 롤백할 수 있습니다. 텍스트 요소의 블록 선택을 지원하고 번호가 매겨진 행이 있습니다...

Komodo Edit는 다양한 프로그래밍 언어를 지원하는 편리한 코드 편집기입니다. 이 프로그램은 사용자에게 한 번에 여러 파일로 작업할 수 있는 기회를 제공하며 자동 완성 기능, 팁을 사용하여 코드 작성이 더 효율적입니다. 응용 프로그램을 사용하면 변수가 선택되면 자동으로 강조 표시할 수 있습니다. 편집기를 사용하여 다른 프로그래밍 언어로 파일을 볼 수 있습니다. 이 프로그램은 구문 색상 지정, 들여쓰기를 지원합니다. 소스 열 코드를 저장하는 데 사용되는 스니펫, 구문 매개변수를 확인할 수 있습니다. 그것은 쉬운 편집 모드를 가지고 있으며 요소의 끌어서 놓기를 지원합니다...

인터넷에 편집할 수 있는 프로그램이 많이 있습니다. 원천다른 프로그램, 파일 등. 그러나 이러한 프로그램의 대부분은 텍스트 에디터메모장처럼. 구문 강조 표시가 있다는 점에서만 위의 편집기와 다릅니다. 그러나 어떤 경우에는 이 프로그램의 기능이 충분하지 않습니다. 프로그래머는 문서의 다른 부분을 빠르게 찾아야 할 수도 있습니다. 그리고 이제 마침내이 문제를 해결할 수있는 프로그램이 나타났습니다. 프로그램 이름은 SynWrite입니다. 그녀의 구별되는 특징– 트리가 있는 탐색 모음의 존재 ...

루아 스크립트

Lua로 작성된 스크립트에는 실행이 시작되는 특별한 기능이 없습니다. 스크립트는 단순히 첫 번째 명령어부터 실행되는 일련의 명령(명령어)으로 볼 수 있습니다.

스크립트는 단 하나의 명령으로 구성된 매우 단순하거나 수십, 수백 또는 수천 개의 명령을 포함하는 매우 복잡할 수 있습니다. 다음 지침은 세미콜론(;)으로 구분할 수 있습니다. 그러나 이 요구 사항은 필수 사항이 아니므로 아래의 모든 코드는 구문 측면에서 정확합니다.

Lua에서 변수 작업하기

변수는 스크립트 실행 중에 값을 저장하는 데 사용됩니다.

Lua의 변수 이름

Lua의 변수 이름(식별자)은 숫자로 시작하지 않는 문자, 숫자 및 밑줄의 시퀀스가 ​​될 수 있습니다.

노트

Lua 언어는 대소문자를 구분하므로 abc, Abc, ABC는 다른 이름입니다.

아래 표에는 Lua 언어로 예약되어 있고 변수 이름에 사용할 수 없는 단어가 나열되어 있습니다.

그리고 break do elseif

다음과 같은 경우 함수에 대해 false로 종료

로컬 nil 또는

반환을 반복한 다음 참이 될 때까지

또한 밑줄로 시작하고 뒤에 오는 모든 이름은 대문자(예: _VERSION)도 예약되어 있습니다.

Lua의 변수는 무엇입니까?

Lua의 변수는 전역적이거나 지역적일 수 있습니다. 변수가 명시적으로 로컬로 선언되지 않은 경우 전역으로 간주됩니다.

루아 전역 변수

전역 변수는 첫 번째 값이 할당되는 순간 나타납니다. 첫 번째 값을 할당하기 전에 전역 변수에 액세스하면 nil이 됩니다.

MsgBox(tostring(g)) --> 없음

MsgBox(tostring(g)) --> 1

전역 변수는 스크립트 실행 환경이 존재하고 이 환경에서 실행되는 모든 Lua 코드에서 사용할 수 있는 한 존재합니다.

필요한 경우 전역 변수를 nil로 설정하여 명시적으로 삭제할 수 있습니다.

g = 1 - 값이 1인 전역 변수 g 생성

g = nil - 전역 변수 g 제거

MsgBox(tostring(g)) --> 없음

모든 전역 변수는 전역 환경이라는 일반 테이블의 필드입니다. 이 테이블은 _G 전역 변수를 통해 사용할 수 있습니다. 전역 환경의 필드는 모두 전역 변수(_G 자체 포함)이므로 _G._G == _G입니다.

루아 지역 변수

모든 지역 변수는 local 키워드를 사용하여 명시적으로 선언해야 합니다. 스크립트의 어느 곳에서나 지역 변수를 선언할 수 있습니다. 선언에는 변수에 초기 값을 할당하는 것이 포함될 수 있습니다. 값이 할당되지 않으면 변수에 nil이 포함됩니다.

지역 a - 지역 변수 선언 a

로컬 b = 1 - 로컬 변수 b를 선언하고 값 1을 할당합니다.

지역 c, d = 2, 3 - 지역 변수 c와 d를 선언하고 값 2와 3을 할당합니다.

지역 변수의 범위는 선언 이후에 시작하여 블록이 끝날 때까지 계속됩니다.

메모

변수의 범위는 이 변수에 저장된 값에 액세스할 수 있는 프로그램 코드 섹션입니다.

차단은 다음을 의미합니다.

제어 구조 본체(if-then, else, for, while, repeat);

기능체;

do...end 키워드로 묶인 코드 조각.

지역 변수가 블록 외부에 정의된 경우 해당 범위는 스크립트 끝까지 확장됩니다.

로컬 i = 1 - 변수 i는 스크립트 내에서 로컬입니다.

내가 동안<= a do - цикл от 1 до 5

지역 a = i^2 - 변수 a는 while 루프 내에서 지역적입니다.

MsgBox(a) --> 1, 4, 9, 16, 25

메시지 상자(a) -->

내가 > 5이면

지역 a - 변수 a는 내부에 지역적입니다.

메시지 상자(a) --> 10

MsgBox(a) --> 5(여기서 전역 참조)

지역 a = 20 - 변수 a는 do-end 내부에서 지역적입니다.

메시지 상자(a) --> 20

MsgBox(a) --> 5(여기서 전역 참조)

노트

가능하면 전역 변수 대신 지역 변수를 사용하는 것이 좋습니다. 이것은 전역 네임스페이스를 오염시키는 것을 피하고 더 나은 성능을 제공합니다(Lua에서 지역 변수에 접근하는 것이 전역 변수에 접근하는 것보다 약간 더 빠르기 때문입니다).

루아 데이터 유형

Lua 언어는 어떤 데이터 유형을 지원합니까?

Lua는 다음 데이터 유형을 지원합니다.

1. 무(無). 의 부재에 해당합니다. 값 변수. 이 유형은 단일 값 nil로 표시됩니다.

2. 부울(논리). 에게 이 유형값은 거짓(거짓)과 참(참)을 포함합니다.

논리 연산을 수행할 때 값 nil은 false로 처리됩니다. 숫자 0과 빈 문자열을 포함한 다른 모든 값은 true로 처리됩니다.

3. 숫자(숫자). 숫자 값을 나타내는 데 사용됩니다.

숫자 상수는 선택 사항일 수 있습니다. 분수 부분및 문자 "e" 또는 "E"로 지정된 선택적 십진 지수. 정수 숫자 상수는 0x 접두사를 사용하여 16진수로 지정할 수 있습니다.

유효한 숫자 상수의 예: 3, 3.0, 3.1415926, 314.16e-2, 0xff.

4. 문자열(문자열). 문자열을 나타내는 데 사용됩니다.

문자열 값은 작은 따옴표 또는 큰 따옴표로 묶인 일련의 문자로 지정됩니다.

a = "이것은 문자열입니다"

b = "두 번째 줄입니다"

큰따옴표로 묶인 문자열은 "\" 문자(백슬래시)로 시작하는 C와 유사한 이스케이프 시퀀스를 해석할 수 있습니다.

\b(공백),

\n(줄 바꿈),

\r(캐리지 리턴);

\t(가로 탭),

\\(백슬래시);

\"" (큰따옴표);

\"(작은따옴표).

노트

문자열의 문자는 이스케이프 시퀀스를 사용하여 코드로 나타낼 수도 있습니다.

여기서 ddd는 3자리 이하의 시퀀스입니다.

따옴표 외에도 이중 대괄호를 사용하여 문자열을 정의할 수도 있습니다.

이중 대괄호로 문자열을 정의하면 모든 이스케이프 시퀀스를 무시할 수 있습니다. 즉, 설명된 대로 문자열이 완전히 생성됩니다.

로컬 a = [] in Lua]=]

"lua의 string[] 정의"라는 용어가 있습니다.

5. 기능(기능). Lua의 함수는 변수에 작성하고, 다른 함수에 매개변수로 전달하고, 함수 실행 결과로 반환할 수 있습니다.

6. 테이블(테이블). 테이블은 테이블의 필드 또는 요소라고 하는 "키" - "값" 쌍의 집합입니다. 키와 테이블 필드 값은 모두 nil을 제외한 모든 유형이 될 수 있습니다. 테이블의 크기는 고정되어 있지 않습니다. 언제든지 임의의 수의 요소를 테이블에 추가할 수 있습니다.

"Lua에서 테이블 생성하기" 기사에서 더 읽어보기

7. 사용자 데이터(사용자 데이터). 특수한 데이터 유형입니다. 이 유형의 값은 Lua 스크립트에서 직접 생성하거나 수정할 수 없습니다.

Userdata는 스크립트의 호출자 또는 C로 작성된 라이브러리에서 생성된 새로운 유형을 나타내는 데 사용됩니다. 예를 들어 "CronosPRO"용 Lua 확장 라이브러리는 이 유형을 사용하여 다음과 같은 객체를 나타냅니다.

데이터 뱅크(은행 클래스);

데이터베이스(클래스 Base);

레코드(클래스 레코드) 등

8.실(실). 실행의 흐름에 해당합니다. 이러한 스트림은 다음과 관련이 없습니다. 운영 체제 Lua 자체를 통해서만 지원됩니다.

Lua에서 변수 유형을 설정하는 방법은 무엇입니까?

Lua는 변수의 유형을 명시적으로 지정하지 않습니다. 변수의 유형은 변수에 값이 할당될 때 설정됩니다. 모든 변수에 모든 유형의 값을 할당할 수 있습니다(이전에 포함된 유형에 관계없이).

a = 123 - 변수 a에 유형 번호가 있습니다.

a = "123" - 이제 변수는 문자열 유형입니다.

a = true - 변수 a는 이제 부울 유형입니다.

a = () - 이제 변수는 테이블 유형입니다.

노트

테이블, 함수, 스레드 및 사용자 데이터 유형의 변수는 데이터 자체를 포함하지 않지만 해당 개체에 대한 참조를 저장합니다. 할당하고 함수에 인수로 전달하고 결과로 함수에서 반환할 때 객체는 복사되지 않고 객체에 대한 참조만 복사됩니다.

a = () - 테이블을 만듭니다. 테이블에 대한 참조는 변수 a에 배치됩니다.

b = a - 변수 b는 a와 동일한 테이블을 참조합니다.

a = 10 - 인덱스가 1인 테이블 요소에는 값 10이 할당됩니다.

MsgBox(b) --> "10"

MsgBox(a) --> "20"

나머지 데이터는 즉각적인 값입니다.

MsgBox(a) --> "20"

MsgBox(b) --> "10"

Lua에서 변수 유형을 얻는 방법은 무엇입니까?

변수에 저장된 값의 유형은 표준 함수 유형을 사용하여 알 수 있습니다. 이 함수는 유형("nil", "number", "string", "boolean", "table", "function", "thread", "userdata")의 이름을 포함하는 문자열을 반환합니다.

t = type("이것은 문자열입니다") - t는 "문자열"과 같습니다.

t = 유형(123) - t는 "숫자"입니다.

t = 유형(유형) - t는 "함수"와 같습니다.

t = 유형(true) - t는 "부울"입니다.

t = 유형(nil) - t는 "nil"입니다.

t = type(CroApp.GetBank()) - t는 "사용자 데이터"와 같습니다.

Lua에서 변수 유형을 변환하는 방법은 무엇입니까?

Lua는 자동으로 숫자를 문자열로 변환하고 필요한 경우 그 반대로 변환합니다. 예를 들어, 문자열 값이 산술 연산에서 피연산자이면 숫자로 변환됩니다. 마찬가지로, 문자열이 예상되는 위치에서 만난 숫자 값은 문자열로 변환됩니다.

a = "10" + 2 - a는 12와 같습니다.

a = "10" + 2 - a는 "10 + 2"와 같습니다.

a = "-5.3e-10"*"2" - a는 -1.06e-09와 같습니다.

a = "문자열" + 2 - 오류! "문자열"을 숫자로 변환할 수 없습니다

표준 tostring 함수를 사용하여 모든 유형의 값을 명시적으로 문자열로 변환할 수 있습니다.

a = tostring(10) - a는 "10"입니다.

a = tostring(true) - "true"와 같습니다.

a = tostring(nil) - "nil"과 같습니다.

a = tostring(( = "이것은 필드 1입니다")) - a는 "테이블: 06DB1058"과 같습니다.

이전 예에서 테이블의 내용이 tostring 함수에 의해 변환되지 않음을 알 수 있습니다. 이 변환은 render 함수를 사용하여 수행할 수 있습니다.

a = render(10) - a는 "10"입니다.

a = render(true) - "true"와 같습니다.

a = render(nil) - "nil"입니다.

a = 렌더링 (( = "이것은 필드 1입니다")) - a는 "( = "이것은 필드 1입니다")"

값을 숫자로 명시적으로 변환하려면 표준 tonumber 함수를 사용할 수 있습니다. 값이 숫자로 변환될 수 있는 문자열이면(또는 이미 숫자인 경우) 함수는 변환 결과를 반환하고, 그렇지 않으면 nil을 반환합니다.

a = tonumber("10") - a는 "10"과 같습니다.

a = tonumber("10"..5") - a는 10.5와 같습니다.

a = tonumber(true) - "nil"과 같습니다.

a = tonumber(nil) - "nil"과 같습니다.

Lua의 주석 배열

Lua에서 주석은 두 개의 빼기 기호(--)로 시작하여 줄 끝까지 계속됩니다.

지역 a = 1 - 한 줄 주석

두 개의 여는 대괄호([[)가 "--" 문자 바로 뒤에 오는 경우 주석은 여러 줄로 작성되고 두 개의 닫는 대괄호(]])까지 계속됩니다.

지역 a = 1 - [[ 여러 줄

논평 ]]

주석의 이중 괄호는 중첩될 수 있습니다. 혼동하지 않도록 대괄호 사이에 등호(=)를 삽입합니다.

지역 a = [[크로노스 컴퍼니]] - [=[

지역 = [[크로노스 컴퍼니]]

"=" 문자의 수에 따라 중첩이 결정됩니다.

local a = [=[Lua의 일부 문자열 정의 []]=] --[==[

local a = [=[Lua의 일부 문자열 [] 정의]=]

루아에서 사용하는 연산

Lua로 작성된 표현식에서는 다음과 같은 종류의 연산을 사용할 수 있습니다.

1. 산술 연산.

Lua는 다음을 지원합니다. 산술 연산:

+ (추가);

- (빼기);

* (곱하기);

/ (분할);

^ (지수);

%(나누기의 나머지).

노트

산술 연산은 숫자와 문자열 모두에 적용할 수 있으며 이 경우 숫자로 변환됩니다.

2. 비교 작업.

Lua에서는 다음 값 비교 작업이 허용됩니다.

== (같음);

~= (같지 않음);

< (меньше);

> (크게);

<= (меньше или равно);

>=(크거나 같음).

노트

비교 작업은 항상 반환됩니다. 부울참 또는 거짓.

숫자를 문자열로(또는 그 반대로) 변환하는 규칙은 비교 중에 작동하지 않습니다. 즉, 표현식 "0" == 0은 거짓이 됩니다.

3. 논리적 작업.

에게 논리 연산말하다:

및 (논리 AND).

and 연산자는 false 또는 nil로 평가되면 첫 번째 피연산자를 반환합니다. 그렇지 않으면 연산은 두 번째 피연산자를 반환합니다(이 피연산자는 모든 유형일 수 있음).

a = (nil 및 5) - a는 nil과 같습니다.

a == (거짓 및 5) - a는 거짓

a == (4 및 5) - a는 5와 같습니다.

또는 (논리적 OR).

or 연산자는 false도 nil도 아닌 경우 첫 번째 피연산자를 반환하고, 그렇지 않으면 두 번째 피연산자를 반환합니다.

a == (4 또는 5) - a는 4와 같습니다.

a == (거짓 또는 5) - a는 5와 같습니다.

노트

두뇌 티저 운영 및및 또는 모든 유형의 값을 반환할 수 있습니다.

논리 연산 및/또는 두 번째 피연산자의 값을 반환해야 하는 경우에만 평가합니다. 필요하지 않은 경우 두 번째 피연산자는 평가되지 않습니다. 예를 들어:

a == (4 또는 f()) - f() 함수는 호출되지 않습니다.

아닙니다(논리적 NOT).

not 연산자는 항상 true 또는 false를 반환합니다.

4. 연결 작업.

문자열을 연결(결합)하려면 ...(점 2개) 연산을 사용합니다.

a = "Kronos".."-".."Inform" - 변수 a는 "Kronos-Inform" 값을 가져옵니다.

노트

피연산자 중 하나 또는 둘 모두가 숫자이면 문자열로 변환됩니다.

a = 0..1 - 변수는 "01" 값을 얻습니다.

5. 길이를 구하는 작업.

Lua는 문자열의 길이를 얻는 데 사용할 수 있는 길이 연산자 #를 정의합니다.

a = "문자열"

len = #a - len은 6과 같습니다.

len = #"한 줄 더" - len은 10입니다.

노트

# 연산자를 사용하여 배열의 최대 인덱스(또는 크기)를 찾을 수도 있습니다. 자세한 내용은 "Lua에서 배열 작업" 문서를 참조하십시오.

Lua의 연산자 우선 순위

Lua에서 작업은 다음 우선 순위(내림차순)에 따라 수행됩니다.

2. # - (단항) 아님

6. < > <= >= ~= ==

양식에서 스크립트 호출

각 양식(중첩 양식 포함)에는 일반적으로 양식 및 해당 요소의 이벤트를 처리하는 함수가 포함된 별도의 스크립트가 연결되어 있습니다.

양식이 실행되면 해당 스크립트가 전역 환경으로 로드됩니다. 폼 또는 해당 요소의 이벤트가 발생하면 시스템은 이 이벤트와 관련된 핸들러 함수를 호출합니다.

양식 스크립트는 모듈 함수에 대한 호출을 포함하지 않지만 실제로는 모듈이라는 점에 유의해야 합니다. 즉, local 키워드 없이 양식 스크립트에서 선언된 변수는 전역 환경에 노출되지 않고 이 스크립트 내에서만 사용할 수 있습니다. 값을 다른 양식 스크립트에서 사용할 수 있어야 하는 경우 전역 _G 테이블에 명시적으로 정의해야 합니다.

로컬 a = _G.var

명령문 블록(지침)

주요 Lua 연산자는 다음과 같습니다.

과제;

조건 연산자;

주기를 조직하기 위한 연산자.

do...end 구문을 사용하여 명령문 그룹을 블록(복합 명령문)으로 결합할 수 있습니다.

do - 블록의 시작

<оператор1>- 블록 바디

<оператор2>

<операторN>

end - 블록의 끝

블록은 지역 변수를 정의할 수 있는 새 범위를 엽니다.

a = 5 - 전역 변수

지역 a = 20 - 지역 변수 a는 do-end 내부에 정의되어 있습니다.

메시지 상자(a) --> 20

MsgBox(a) --> 5(여기서 참조는 이미 전역 a)

Lua의 할당 연산자

할당은 변수 또는 테이블 필드의 값을 변경합니다. 가장 간단한 형태의 할당은 다음과 같습니다.

a = 1 - 변수 a에 값 1이 할당됨

a = b + c - 변수 a에는 변수 b와 c 값의 합이 할당됩니다.

a = f(x) - 변수 a에 함수 f(x)가 반환한 값이 할당됩니다.

Lua에서는 할당 연산자의 왼쪽에 있는 여러 변수가 할당 연산자의 오른쪽에 작성된 여러 표현식의 값을 받을 때 소위 다중 할당이 허용됩니다.

a, b = 1, 5*c - a는 1과 같습니다. b는 5*c와 같습니다.

값보다 변수가 더 많은 경우 "추가" 변수에는 nil이 할당됩니다.

a, b, c = 1, 2 - a는 1과 같습니다. b는 2이고; c는 0과 같습니다.

변수보다 더 많은 값이 있는 경우 "추가" 값은 무시됩니다.

a, b = 1, 2, 3 - a는 1과 같습니다. b는 2이고; 값 3 사용되지 않음

다중 할당을 사용하여 변수 간에 값을 교환할 수 있습니다.

a = 10; b = 20 - a는 10, b는 20

a, b = b, a - 이제 a는 20, b는 10

Lua의 조건문(if)

if 문은 진실을 확인합니다 주어진 조건. 조건이 참이면 다음 코드 부분이 실행됩니다. 예어그런 다음(그 다음 섹션). 그렇지 않으면 else 키워드(else 섹션) 뒤에 오는 코드가 실행됩니다.

> b이면

return - b보다 크면 반환

b를 반환 - 그렇지 않으면 b를 반환

else 섹션은 ​​선택 사항입니다.

만약< 0 then

a = 0 - a가 0보다 작은 경우 a를 0으로 설정

중첩된 if 문 대신 elseif 구문을 사용할 수 있습니다. 예를 들어 다음 코드:

다음과 같이 바꾸면 읽기가 더 쉬울 것입니다.

"Ivan" 반환 - 1인 경우

elseif a == 2이면

"Peter" 반환 - 2인 ​​경우

elseif a == 3이면

"Sergey" 반환 - 3인 경우

"해당 플레이어 없음" 반환 - 목록에 없는 경우

Lua에서 전제 조건(while)이 있는 루프

while 문은 전제 조건이 있는 주기를 구성하도록 설계되었으며 다음 형식을 갖습니다.

동안 하다

... - 루프 본체

루프의 각 반복 전에 조건이 확인됩니다. :

조건이 거짓이면 루프가 종료되고 제어가 while 문 다음의 첫 번째 문으로 넘어갑니다.

조건이 참이면 루프의 본문이 실행된 후 모든 작업이 반복됩니다.

while i > 0 do - 10에서 1로 루프

t[i] = "필드"..i

a = (3, 5, 8, -6, 5)

while i > 0 do - 배열에서 음수 값을 찾습니다.

만약 [i]< 0 then break end - если найдено, прерываем цикл

i = i - 1 - 그렇지 않으면 다음 요소로 이동

내가 > 0이면

MsgBox("음수 값 인덱스: "..i)

MsgBox("배열에 음수 값이 없습니다.")

메모

Lua에서 사후 조건이 있는 루프(반복)

반복 연산자는 사후 조건이 있는 주기를 구성하도록 설계되었으며 다음 형식을 갖습니다.

... - 루프 본체

~까지

루프의 본문은 조건이 될 때까지 실행됩니다. 사실이 되지 않습니다. 루프 본문이 실행된 후에 조건이 확인되므로 어떤 경우에도 루프 본문은 한 번 이상 실행됩니다.

합계가 10을 초과할 때까지 배열 a의 값 합계

a = (3, 2, 5, 7, 9)

합계 = 합계 + a[i]

합계 > 10까지

MsgBox("추가된 ..i.." 항목. 합계는 "..sum)입니다.

break 문을 사용하여 루프가 종료되기 전에 루프에서 벗어날 수 있습니다.

메모

break 문 사용 기능에 대한 자세한 내용은 "Break 및 return 문" 문서를 참조하세요.

루아에서 for 문이 있는 루프

for 문은 루프를 구성하기 위한 것이며 두 가지 형식의 작성을 허용합니다.

단순(숫자);

확장(범용).

for 문의 간단한 형식

for 문의 간단한 형식은 다음과 같습니다.

var = exp1, exp2, exp3의 경우

... - 루프 본체

루프 본문은 각 값에 대해 실행됩니다. 루프 변수(카운터) var exp1에서 exp2까지, exp3 단계에서.

메모

단계를 지정하지 않을 수 있습니다. 이 경우 1과 동일하게 취합니다.

for i = 1, 10 do - 1단계에서 1에서 10까지 루프

MsgBox("i는 같음"..i)

for i = 10, 1, -1 do - -1 단계로 10에서 1로 루프

MsgBox("i는 같음"..i)

노트

표현식 exp1, exp2 및 exp3은 루프 시작 전에 한 번만 평가됩니다. 따라서 아래 예에서 함수 f(x)는 루프의 상한선을 한 번만 계산하기 위해 호출됩니다.

for i = 1, f(x) do - 1에서 f()에 의해 반환된 값까지 루프

MsgBox("i는 같음"..i)

루프 변수는 루프 문에 대해 로컬이며 루프의 끝에서 정의되지 않습니다.

for i = 1, 10 do - 1에서 f()에 의해 반환된 값으로 루프

MsgBox("i는 같음"..i)

MsgBox("루프를 종료한 후 i는 "..i"입니다.) - 틀렸습니다! 나는 0과 같다

노트

루프 변수의 값은 루프 내에서 변경할 수 없습니다. 이러한 변경의 결과는 예측할 수 없습니다.

break 문은 루프가 완료되기 전에 루프를 종료하는 데 사용됩니다.

a = (3, 5, 8, -6, 5)

for i = 1,#a do - 배열에서 음수 값을 찾습니다.

만약 [i]< 0 then - если найдено...

index = i - 찾은 값의 인덱스를 저장합니다...

break - 루프를 끊습니다.

MsgBox("음수 값 인덱스: "..index)

메모

break 문 사용 기능에 대한 자세한 내용은 "Break 및 return 문" 문서를 참조하세요.