Page semi-protected

위키백과:루아

Wikipedia
위키백과 자료 구조
네임스페이스
제목 네임스페이스 대화 네임스페이스
0 (주요/기사) 말해라. 1
2 사용자 사용자 대화 3
4 위키백과 위키백과 토크 5
6 파일 파일 토크 7
8 미디어위키 미디어위키토크 9
10 템플릿 템플릿 토크 11
12 도와 주세요. 도움말 대화 13
14 카테고리 카테고리 토크 15
100 포털 포털 토크 101
118 초안 초안 토크 119
710 시간 지정 텍스트 시간 지정 문자 대화 711
828 모듈 모듈 토크 829
사용되지 않음
2300 가젯 가젯토크 2301
2302 가젯 정의 가젯 정의 토크 2303
설치되지 않음
90 스레드 토크 91
92 요약 요약토크 93
108 북토크 109
442 코스 강좌 강좌 443
444 기관. 기관토크 445
446 교육 프로그램 교육 프로그램 토크 447
2600 주제 2601
가상 네임스페이스
-1 스페셜
-2 미디어
현재 목록(API 호출)

Lua는 영어 위키백과의 Scribunto MediaWiki 확장을 통해 사용할 수 있는 프로그래밍 언어입니다.2013년 2월부터 Scribunto의 "{#invoke:}}" 기능을 사용하여 Lua 코드를 위키 템플릿에 포함할 수 있습니다.이 확장은 2022년 10월 기준으로 Lua 5.1을 지원합니다.

Lua 소스 코드는 모듈(예: 모듈:).그런 다음 이러한 개별 모듈이 호출됩니다(코드별).{{#invoke:<Module name> <Function name> (optional) param1 param2...}}). 예:

위키텍스트 결과
{{#invoke:Example hello}} 헬로 월드!

모듈 실행

모듈은 #invoke 파서 함수를 사용하여 일반 Wiki 페이지에서 실행됩니다.#invoke의 구문은 템플릿 구문과 비슷하지만 몇 가지 차이점이 있습니다.가장 중요한 차이점은 함수 이름을 지정해야 한다는 것입니다.함수는 입력 값을 가져와서 처리하고 출력 [1]값을 반환하는 명령 집합입니다.이것은 템플릿이 하는 일과 매우 유사합니다. 당신은 그것에 인수를 주고, 그것을 처리하고, 결과를 얻습니다.그러나 하나의 Lua 모듈에서는 여러 기능을 정의할 수 있지만 한 페이지에서는 템플릿을 하나만 정의할 수 있습니다.

또한 Lua 모듈을 직접 실행할 수는 없습니다. 모듈의 기능 중 하나만 실행할 수 있습니다.모듈은 기능을 위한 컨테이너일 뿐이며, 자체적으로 아무것도 하지 않습니다.따라서 함수 이름을 입력해야 하는 두 가지 이유가 있습니다. 함수 이름을 지정하지 않으면 Lua는 어떤 함수를 실행할지 알 수 없습니다.

Wiki 페이지에서 모듈을 실행하는 가장 간단한 방법은 다음과 같습니다.

{{#filename:이름 기능명}}

예를 들어 모듈을 실행할 수 있습니다.예를 들어, "hello"라는 이름의 함수가 있습니다.

  • {{#invoke:Example hello}}헬로 월드!

인수 사용

인수는 템플릿에 전달되는 것과 동일한 방식으로 모듈에 전달됩니다.그러나 첫 번째 파이프 문자 뒤의 텍스트는 항상 함수 이름입니다. 첫 번째 위치 인수는 두 번째 파이프 뒤의 텍스트입니다.

{{#values}: 이름 없는 함수 이름 첫 번째 위치 인수번째 위치 인수 이름 있는 인수 = value}

모듈 내:를 들어, "hello_to" 함수는 첫 번째 위치 인수에 따라 다른 사용자에게 인사합니다.다음과 같이 작동합니다.

  • {{#invoke:Example hello_to Kate}}안녕, 케이트!
  • {{#invoke:Example hello_to Fred}}안녕, 프레드!

모듈의 세 번째 기능:이름이 "count_fruit"인 예제는 명명된 인수를 사용합니다.bananas그리고.apples우리가 가지고 있는 바나나와 사과의 수를 세는 것.다음과 같이 실행할 수 있습니다.

  • {{#invoke:Example count_fruit apples=3 bananas=4}}나는 바나나 4개와 사과 3개를 가지고 있습니다.
  • {{#invoke:Example count_fruit bananas=5 apples=2}}나는 바나나 5개와 사과 2개를 가지고 있습니다.

대부분의 모듈에는 사용할 수 있는 인수와 그 영향을 설명하는 문서 페이지가 있습니다.

스크립트 요청

Wikipedia 토크:Lua는 Wikipedia 또는 다른 Wikimedia Foundation 프로젝트에서 특정 작업을 수행하기 위해 Lua 스크립트를 작성하는 데 도움을 요청합니다.

역사

더러운 역사.{{qif}}, 파서 함수, Lua 확장, 위키 스크립트 언어 토론(JavaScript v. Lua), mw:확장:위키스크립트, 팀은 루아에 대한 초기 지원으로 스크리쿤토를 작성합니다.

수년간 논의된 바와 같이 Lua는 2012년에 테스트 2를 위해 설치되었습니다.wikipedia.org , 모든 편집자에게 루아 모듈을 개발하는 실험을 요청합니다.Lua는 mediawiki.org 및 Wikimedia 테스트 위키에서 테스트한 후 2013년 2월에 영어 위키백과에 설치되었습니다.

루아 소개

또한 위키 텍스트 템플릿을 Lua 모듈로 변환하는 방법에 대한 기본적인 예는 Brad Jorsch의 짧은 프레젠테이션을 참조하십시오.

Lua는 함수 또는 객체 지향 프로그래밍을 사용하여 데이터를 분석하고 식을 계산하고 결과를 포맷하는 데 사용할 수 있는 스크립트 언어입니다.일부 Lua 스크립트는 단순하게 유지할 수 있지만 쉽게 이해하기 위해 Lua를 사용하면 테이블, 동적 함수 및 인덱스 첨자가 단어가 될 수 있는 연관 배열을 포함한 복잡한 구조를 사용할 수 있습니다.또한 Lua는 재포스팅된 기능의 재귀를 지원하므로 다른 사용자가 Lua 모듈을 유지 관리하는 방법을 이해하지 못하는 과도한 복잡성을 방지하기 위해 주의해야 합니다.다음은 위의 예제에 사용된 모듈의 소스 코드입니다.

현지의 p = {};     --위키백과의 모든 Lua 모듈은 변수를 정의하는 것으로 시작해야 합니다.                     --외부에서 액세스할 수 있는 기능을 보유합니다.                     --이러한 변수는 원하는 이름과 가능한 이름을 가질 수 있습니다.                     --기능뿐만 아니라 다양한 데이터도 포함되어 있습니다. p.안녕하세요. = 기능.(  )     --p에 함수를 추가합니다.                                         --위키백과에서 이러한 기능을 호출할 수 있습니다.                                         --vmdk 명령을 사용합니다.                                         --"frame"에는 위키백과의 데이터가 포함됩니다.                                         --이 함수가 실행될 때 이 함수를 실행합니다.                                  'Hello'는 당신이 선택한 이름입니다.모듈을 사용할 때 동일한 이름을 참조해야 합니다.          현지의 스트르 = "헬로 월드!"  --로컬 변수를 선언하고 다음과 같이 설정합니다.                                 --"Hello World!"          돌아가다 스트르    --이것은 우리에게 이 기능을 종료하고 정보를 전송하라는 것을 알려줍니다.                   --"str" 다시 위키백과로 돌아갑니다.      끝.  함수 "안녕하세요"의 끝 기능. p.안녕_에게()  다른 함수 추가  현지의 이름. = .논병아리[1]  모듈에 전달된 인수에 액세스하려면 'frame.args'를 사용합니다.            "frame.args[1]"은 이름이 지정되지 않은 첫 번째 매개 변수를 참조합니다.            모듈에 주어진  돌아가다 "안녕하세요," .. 이름. .. "!"  문자열을 연결합니다.사용자 지정된 항목을 반환합니다.           "안녕하세요, 프레드!"와 같이 이름에 따라 인사하는 것. 끝. 기능. p.과일을 세다()  현지의 num_html = .논병아리.바나나 명명된 인수({#invoke:예제 count_fruit foo=bar})도 마찬가지입니다.  현지의 num_html = .논병아리.사과   이름으로 'frame.args'를 인덱싱하여 액세스합니다('frame.args["frame"]).              등가 "frame.args.guit".  돌아가다 있습니다. .. num_html .. 바나나와 ' .. num_html .. 사과의              위와 같이 여러 줄을 연결하여 생산합니다.              주어진 주장에 입각한 문장 끝.  돌아가다 p    --모든 모듈은 함수가 포함된 변수를 Wikipedia로 반환하는 것으로 끝납니다. 이제 {{#invoke: Example hello}}을(를) 호출하여 이 모듈을 사용할 수 있습니다. {{#invoke: 예: hello_to foo}}, 또는 {{#invoke:예제 카운트_과일바나나=사과5개=6}}개 호출의 첫 번째 부분은 모듈의 위키 페이지 이름입니다. 그리고 두 번째 부분은 기능 중 하나의 이름입니다. 반환한 변수입니다.  "인쇄" 기능은 위키백과에서 허용되지 않습니다.모든 출력이 완료되었습니다. 위키백과로 "반환"된 문자열을 통해. 

Lua 샘플은 "<highlight lang="lua"> 태그로 강조 표시됩니다.Lua 소스 코드 주위에 배치된 ".Lua의 더 복잡한 예를 보려면 "Lua(프로그래밍 언어)" 문서를 참조하십시오.

MediaWiki(및 위키백과)에서 Lua를 사용하는 방법에 대한 지침은 mw:확장:/Lua 참조 매뉴얼에 스크리빙합니다.

유닛 테스트

Wikipedia의 Lua 스크립트에 대해 몇 가지 유닛 테스트 프레임워크를 사용할 수 있습니다.이를 통해 편집자는 주어진 입력 집합으로 모듈을 실행하고 예상 출력이 생성되는지 확인할 수 있습니다.스크립트를 수정하면 새로운(또는 이전) 문제가 발생하는 소프트웨어 회귀를 신속하게 탐지하는 데 유용합니다.

관례에 따라 모듈과 같은 모듈에 대한 장치 테스트: 모듈에 있습니다.모듈 토크에서 실행되는 예제/테스트 사례:예제/테스트 사례.

모듈: 유닛 및 모듈대한 구독:유닛 테스트는 널리 사용되는 테스트 프레임워크입니다.범주:테스트 도구를 위한 모듈은 흥미로울 수 있는 검토해야 할 몇 가지가 있습니다.

미디어위키별 기능

전체: Lua는 텍스트 문자열이 다음으로 전달될 때만 입력을 받을 수 있습니다.{{#invoke:}}mw.title.new(...):getContent() 및 frame:expandTemplate()를 통해 가져올 수 있는 항목.Lua 출력은 frame:preprocess()를 명시적으로 호출하지 않으면 전처리되지 않습니다. 즉, 출력의 템플릿 호출, 파서 함수 등이 제대로 작동하지 않습니다.또한 페이지의 모든 Lua는 CPU 시간이 10초로 제한됩니다(렌더된 페이지의 소스 코드에서 템플릿이나 모듈이 구문 분석하는 데 걸린 시간을 확인할 수 있습니다).그리고 표준 Lua에 비해 Scribunto의 Lua는 모든 종류의 함수가 부족합니다(mw:확장:Scribunto/Lua 참조 매뉴얼 ① 표준 Lua와의 차이)

Lua 입력 제한

Scribunto의 Lua 코드는 페이지를 구문 분석할 때만 실행됩니다.따라서 Lua가 수신할 수 있는 사용자 입력은 페이지 편집뿐입니다. 입력한 숫자의 제곱근을 계산하는 상자를 만들 수도 없고, 부모 집합의 어느 부분을 클릭하느냐에 따라 Mandelbrot 집합의 일부를 다시 계산할 수도 없습니다.Lua가 수신할 수 있는 입력에는 위키백과의 모든 전사 가능한 텍스트 페이지가 포함됩니다.여기에는 그래픽 파일이 포함되지 않습니다(심지어 포함되지도 않음).SVG 파일(실제로는 텍스트이지만 Wiki 텍스트 페이지에 잘라 붙여넣지 않는 한), 범주에 나열된 페이지 목록 또는 특정 페이지를 통과할 수 없는 특수 페이지의 내용입니다.

위키텍스트

제외된 위키백과 헤더에는 "UNIQ5ae8f2a414ff233-h-3--QINU"와 같은 숨겨진 코드가 포함되어 있는 경우가 많습니다.

파이프[[Wikipedia:Help ]] 트릭을 사용하는 Wikilink는 출력으로 반환되면 작동하지 않습니다. 로 명시적으로 작성해야 합니다.서명으로 바꾸기와 같은 다른 저장 전 변환도 처리되지 않습니다.템플릿 결론, 파서 함수 호출 및 변수 대체(즉, 다음을 포함하는 모든 변수){{...}})는 처리되지 않으며 다음과 같은 태그도 처리되지 않습니다.<ref>또는<nowiki>다음과 같은 태그를 추가할 때 사용합니다.<ref>또는<syntaxhighlight>출력할 수 있습니다.

변환된 템플릿 레이블 지정

Lua를 사용하는 모든 템플릿의 설명서 하위 페이지에 {{lua}} 템플릿을 배치하십시오.Lua 사용 및 템플릿 변환을 더 잘 전달하는 데 도움이 될 것입니다.

참고 항목

노트

  1. ^ 출력 값을 여러 개 가질 수도 있지만 일반적으로 Wiki 페이지에서 액세스할 수 있는 기능은 아닙니다.