docs&Lua input()

This commit is contained in:
2026-02-04 15:32:13 +08:00
parent 33afd6f2b5
commit 33510365f4
30 changed files with 24243 additions and 30 deletions

View File

@@ -19,6 +19,7 @@ namespace UniLua
new NameFuncPair( "dofile", LuaBaseLib.B_DoFile ),
new NameFuncPair( "error", LuaBaseLib.B_Error ),
new NameFuncPair( "ipairs", LuaBaseLib.B_Ipairs ),
new NameFuncPair( "input", LuaBaseLib.B_Input ),
new NameFuncPair( "loadfile", LuaBaseLib.B_LoadFile ),
new NameFuncPair( "load", LuaBaseLib.B_Load ),
new NameFuncPair( "loadstring", LuaBaseLib.B_Load ),
@@ -115,6 +116,21 @@ namespace UniLua
return lua.Error();
}
public static int B_Input( ILuaState lua )
{
string prompt = lua.L_OptString( 1, "> " );
lua.SetTop( 1 );
Console.Write( prompt );
string input = Console.ReadLine();
if( input != null )
{
lua.PushString( input );
return 1;
}
lua.PushNil();
return 1;
}
private static int LoadAux( ILuaState lua, ThreadStatus status, int envidx )
{
if( status == ThreadStatus.LUA_OK )

1
docs/cmleonos/.gitignore vendored Normal file
View File

@@ -0,0 +1 @@
node_modules/

File diff suppressed because it is too large Load Diff

File diff suppressed because one or more lines are too long

View File

@@ -0,0 +1,136 @@
// node_modules/.pnpm/@vuepress+shared@2.0.0-rc.20/node_modules/@vuepress/shared/dist/index.js
var isLinkWithProtocol = (link) => /^[a-z][a-z0-9+.-]*:/.test(link) || link.startsWith("//");
var markdownLinkRegexp = /.md((\?|#).*)?$/;
var isLinkExternal = (link, base = "/") => isLinkWithProtocol(link) || // absolute link that does not start with `base` and does not end with `.md`
link.startsWith("/") && !link.startsWith(base) && !markdownLinkRegexp.test(link);
var isLinkHttp = (link) => /^(https?:)?\/\//.test(link);
var inferRoutePath = (rawPath) => {
if (!rawPath || rawPath.endsWith("/")) return rawPath;
let routePath = rawPath.replace(/(^|\/)README.md$/i, "$1index.html");
if (routePath.endsWith(".md")) {
routePath = `${routePath.substring(0, routePath.length - 3)}.html`;
} else if (!routePath.endsWith(".html")) {
routePath = `${routePath}.html`;
}
if (routePath.endsWith("/index.html")) {
routePath = routePath.substring(0, routePath.length - 10);
}
return routePath;
};
var FAKE_HOST = "http://.";
var normalizeRoutePath = (pathname, current) => {
if (!pathname.startsWith("/") && current) {
const loc = current.slice(0, current.lastIndexOf("/"));
return inferRoutePath(new URL(`${loc}/${pathname}`, FAKE_HOST).pathname);
}
return inferRoutePath(pathname);
};
var resolveLocalePath = (locales, routePath) => {
const localePaths = Object.keys(locales).sort((a, b) => {
const levelDelta = b.split("/").length - a.split("/").length;
if (levelDelta !== 0) {
return levelDelta;
}
return b.length - a.length;
});
for (const localePath of localePaths) {
if (routePath.startsWith(localePath)) {
return localePath;
}
}
return "/";
};
var resolveRoutePathFromUrl = (url, base = "/") => {
const pathname = url.replace(/^(?:https?:)?\/\/[^/]*/, "");
return pathname.startsWith(base) ? `/${pathname.slice(base.length)}` : pathname;
};
var SPLIT_CHAR_REGEXP = /(#|\?)/;
var splitPath = (path) => {
const [pathname, ...hashAndQueries] = path.split(SPLIT_CHAR_REGEXP);
return {
pathname,
hashAndQueries: hashAndQueries.join("")
};
};
var TAGS_ALLOWED = ["link", "meta", "script", "style", "noscript", "template"];
var TAGS_UNIQUE = ["title", "base"];
var resolveHeadIdentifier = ([tag, attrs, content]) => {
if (TAGS_UNIQUE.includes(tag)) {
return tag;
}
if (!TAGS_ALLOWED.includes(tag)) {
return null;
}
if (tag === "meta" && attrs.name) {
return `${tag}.${attrs.name}`;
}
if (tag === "template" && attrs.id) {
return `${tag}.${attrs.id}`;
}
return JSON.stringify([
tag,
Object.entries(attrs).map(([key, value]) => {
if (typeof value === "boolean") {
return value ? [key, ""] : null;
}
return [key, value];
}).filter((item) => item != null).sort(([keyA], [keyB]) => keyA.localeCompare(keyB)),
content
]);
};
var dedupeHead = (head) => {
const identifierSet = /* @__PURE__ */ new Set();
const result = [];
head.forEach((item) => {
const identifier = resolveHeadIdentifier(item);
if (identifier && !identifierSet.has(identifier)) {
identifierSet.add(identifier);
result.push(item);
}
});
return result;
};
var ensureLeadingSlash = (str) => str.startsWith("/") ? str : `/${str}`;
var ensureEndingSlash = (str) => str.endsWith("/") || str.endsWith(".html") ? str : `${str}/`;
var formatDateString = (str, defaultDateString = "") => {
const dateMatch = str.match(/\b(\d{4})-(\d{1,2})-(\d{1,2})\b/);
if (dateMatch === null) {
return defaultDateString;
}
const [, yearStr, monthStr, dayStr] = dateMatch;
return [yearStr, monthStr.padStart(2, "0"), dayStr.padStart(2, "0")].join("-");
};
var omit = (obj, ...keys) => {
const result = { ...obj };
for (const key of keys) {
delete result[key];
}
return result;
};
var removeEndingSlash = (str) => str.endsWith("/") ? str.slice(0, -1) : str;
var removeLeadingSlash = (str) => str.startsWith("/") ? str.slice(1) : str;
var isFunction = (val) => typeof val === "function";
var isPlainObject = (val) => Object.prototype.toString.call(val) === "[object Object]";
var isString = (val) => typeof val === "string";
export {
dedupeHead,
ensureEndingSlash,
ensureLeadingSlash,
formatDateString,
inferRoutePath,
isFunction,
isLinkExternal,
isLinkHttp,
isLinkWithProtocol,
isPlainObject,
isString,
normalizeRoutePath,
omit,
removeEndingSlash,
removeLeadingSlash,
resolveHeadIdentifier,
resolveLocalePath,
resolveRoutePathFromUrl,
splitPath
};
//# sourceMappingURL=@vuepress_shared.js.map

File diff suppressed because one or more lines are too long

View File

@@ -0,0 +1,37 @@
{
"hash": "b2d8ea98",
"configHash": "430a1927",
"lockfileHash": "2b714391",
"browserHash": "d22a0b3e",
"optimized": {
"@vue/devtools-api": {
"src": "../../../../node_modules/.pnpm/@vue+devtools-api@7.7.9/node_modules/@vue/devtools-api/dist/index.js",
"file": "@vue_devtools-api.js",
"fileHash": "8d22f0e2",
"needsInterop": false
},
"@vuepress/shared": {
"src": "../../../../node_modules/.pnpm/@vuepress+shared@2.0.0-rc.20/node_modules/@vuepress/shared/dist/index.js",
"file": "@vuepress_shared.js",
"fileHash": "8ed39465",
"needsInterop": false
},
"vue": {
"src": "../../../../node_modules/.pnpm/vue@3.5.27/node_modules/vue/dist/vue.runtime.esm-bundler.js",
"file": "vue.js",
"fileHash": "13cc40f5",
"needsInterop": false
},
"vue-router": {
"src": "../../../../node_modules/.pnpm/vue-router@4.6.4_vue@3.5.27/node_modules/vue-router/dist/vue-router.esm-bundler.js",
"file": "vue-router.js",
"fileHash": "8f174c5b",
"needsInterop": false
}
},
"chunks": {
"chunk-OARA6QKZ": {
"file": "chunk-OARA6QKZ.js"
}
}
}

File diff suppressed because it is too large Load Diff

File diff suppressed because one or more lines are too long

View File

@@ -0,0 +1,3 @@
{
"type": "module"
}

File diff suppressed because it is too large Load Diff

File diff suppressed because one or more lines are too long

View File

@@ -0,0 +1,346 @@
import {
BaseTransition,
BaseTransitionPropsValidators,
Comment,
DeprecationTypes,
EffectScope,
ErrorCodes,
ErrorTypeStrings,
Fragment,
KeepAlive,
ReactiveEffect,
Static,
Suspense,
Teleport,
Text,
TrackOpTypes,
Transition,
TransitionGroup,
TriggerOpTypes,
VueElement,
assertNumber,
callWithAsyncErrorHandling,
callWithErrorHandling,
camelize,
capitalize,
cloneVNode,
compatUtils,
compile,
computed,
createApp,
createBaseVNode,
createBlock,
createCommentVNode,
createElementBlock,
createHydrationRenderer,
createPropsRestProxy,
createRenderer,
createSSRApp,
createSlots,
createStaticVNode,
createTextVNode,
createVNode,
customRef,
defineAsyncComponent,
defineComponent,
defineCustomElement,
defineEmits,
defineExpose,
defineModel,
defineOptions,
defineProps,
defineSSRCustomElement,
defineSlots,
devtools,
effect,
effectScope,
getCurrentInstance,
getCurrentScope,
getCurrentWatcher,
getTransitionRawChildren,
guardReactiveProps,
h,
handleError,
hasInjectionContext,
hydrate,
hydrateOnIdle,
hydrateOnInteraction,
hydrateOnMediaQuery,
hydrateOnVisible,
initCustomFormatter,
initDirectivesForSSR,
inject,
isMemoSame,
isProxy,
isReactive,
isReadonly,
isRef,
isRuntimeOnly,
isShallow,
isVNode,
markRaw,
mergeDefaults,
mergeModels,
mergeProps,
nextTick,
nodeOps,
normalizeClass,
normalizeProps,
normalizeStyle,
onActivated,
onBeforeMount,
onBeforeUnmount,
onBeforeUpdate,
onDeactivated,
onErrorCaptured,
onMounted,
onRenderTracked,
onRenderTriggered,
onScopeDispose,
onServerPrefetch,
onUnmounted,
onUpdated,
onWatcherCleanup,
openBlock,
patchProp,
popScopeId,
provide,
proxyRefs,
pushScopeId,
queuePostFlushCb,
reactive,
readonly,
ref,
registerRuntimeCompiler,
render,
renderList,
renderSlot,
resolveComponent,
resolveDirective,
resolveDynamicComponent,
resolveFilter,
resolveTransitionHooks,
setBlockTracking,
setDevtoolsHook,
setTransitionHooks,
shallowReactive,
shallowReadonly,
shallowRef,
ssrContextKey,
ssrUtils,
stop,
toDisplayString,
toHandlerKey,
toHandlers,
toRaw,
toRef,
toRefs,
toValue,
transformVNodeArgs,
triggerRef,
unref,
useAttrs,
useCssModule,
useCssVars,
useHost,
useId,
useModel,
useSSRContext,
useShadowRoot,
useSlots,
useTemplateRef,
useTransitionState,
vModelCheckbox,
vModelDynamic,
vModelRadio,
vModelSelect,
vModelText,
vShow,
version,
warn,
watch,
watchEffect,
watchPostEffect,
watchSyncEffect,
withAsyncContext,
withCtx,
withDefaults,
withDirectives,
withKeys,
withMemo,
withModifiers,
withScopeId
} from "./chunk-OARA6QKZ.js";
export {
BaseTransition,
BaseTransitionPropsValidators,
Comment,
DeprecationTypes,
EffectScope,
ErrorCodes,
ErrorTypeStrings,
Fragment,
KeepAlive,
ReactiveEffect,
Static,
Suspense,
Teleport,
Text,
TrackOpTypes,
Transition,
TransitionGroup,
TriggerOpTypes,
VueElement,
assertNumber,
callWithAsyncErrorHandling,
callWithErrorHandling,
camelize,
capitalize,
cloneVNode,
compatUtils,
compile,
computed,
createApp,
createBlock,
createCommentVNode,
createElementBlock,
createBaseVNode as createElementVNode,
createHydrationRenderer,
createPropsRestProxy,
createRenderer,
createSSRApp,
createSlots,
createStaticVNode,
createTextVNode,
createVNode,
customRef,
defineAsyncComponent,
defineComponent,
defineCustomElement,
defineEmits,
defineExpose,
defineModel,
defineOptions,
defineProps,
defineSSRCustomElement,
defineSlots,
devtools,
effect,
effectScope,
getCurrentInstance,
getCurrentScope,
getCurrentWatcher,
getTransitionRawChildren,
guardReactiveProps,
h,
handleError,
hasInjectionContext,
hydrate,
hydrateOnIdle,
hydrateOnInteraction,
hydrateOnMediaQuery,
hydrateOnVisible,
initCustomFormatter,
initDirectivesForSSR,
inject,
isMemoSame,
isProxy,
isReactive,
isReadonly,
isRef,
isRuntimeOnly,
isShallow,
isVNode,
markRaw,
mergeDefaults,
mergeModels,
mergeProps,
nextTick,
nodeOps,
normalizeClass,
normalizeProps,
normalizeStyle,
onActivated,
onBeforeMount,
onBeforeUnmount,
onBeforeUpdate,
onDeactivated,
onErrorCaptured,
onMounted,
onRenderTracked,
onRenderTriggered,
onScopeDispose,
onServerPrefetch,
onUnmounted,
onUpdated,
onWatcherCleanup,
openBlock,
patchProp,
popScopeId,
provide,
proxyRefs,
pushScopeId,
queuePostFlushCb,
reactive,
readonly,
ref,
registerRuntimeCompiler,
render,
renderList,
renderSlot,
resolveComponent,
resolveDirective,
resolveDynamicComponent,
resolveFilter,
resolveTransitionHooks,
setBlockTracking,
setDevtoolsHook,
setTransitionHooks,
shallowReactive,
shallowReadonly,
shallowRef,
ssrContextKey,
ssrUtils,
stop,
toDisplayString,
toHandlerKey,
toHandlers,
toRaw,
toRef,
toRefs,
toValue,
transformVNodeArgs,
triggerRef,
unref,
useAttrs,
useCssModule,
useCssVars,
useHost,
useId,
useModel,
useSSRContext,
useShadowRoot,
useSlots,
useTemplateRef,
useTransitionState,
vModelCheckbox,
vModelDynamic,
vModelRadio,
vModelSelect,
vModelText,
vShow,
version,
warn,
watch,
watchEffect,
watchPostEffect,
watchSyncEffect,
withAsyncContext,
withCtx,
withDefaults,
withDirectives,
withKeys,
withMemo,
withModifiers,
withScopeId
};

View File

@@ -0,0 +1,7 @@
{
"version": 3,
"sources": [],
"sourcesContent": [],
"mappings": "",
"names": []
}

View File

@@ -0,0 +1,19 @@
import { defaultTheme } from '@vuepress/theme-default'
import { defineUserConfig } from 'vuepress'
import { viteBundler } from '@vuepress/bundler-vite'
export default defineUserConfig({
lang: 'zh-CN',
title: 'CMLeonOS官方文档站',
description: 'CMLeonOS是一个基于微内核架构的操作系统它的目标是提供一个简单、可靠、安全的操作系统环境。',
theme: defaultTheme({
// logo: 'https://vuejs.press/images/hero.png',
navbar: ['/', '/get-started', '/lua'],
}),
bundler: viteBundler(),
})

View File

@@ -0,0 +1,43 @@
<!doctype html>
<html lang="zh-CN">
<head>
<meta charset="utf-8" />
<meta name="viewport" content="width=device-width,initial-scale=1" />
<meta name="generator" content="VuePress 2.0.0-rc.20" />
<style>
:root {
--vp-c-bg: #fff;
}
[data-theme='dark'] {
--vp-c-bg: #1b1b1f;
}
html,
body {
background-color: var(--vp-c-bg);
}
</style>
<script>
const useChoice = localStorage.getItem('vuepress-color-scheme')
const systemStatus =
'matchMedia' in window
? window.matchMedia('(prefers-color-scheme: dark)').matches
: false
if (useChoice === 'light') {
document.documentElement.dataset.theme = 'light'
} else if (useChoice === 'dark' || systemStatus) {
document.documentElement.dataset.theme = 'dark'
}
</script>
<title>CMLeonOS官方文档站</title><meta name="description" content="CMLeonOS是一个基于微内核架构的操作系统它的目标是提供一个简单、可靠、安全的操作系统环境。">
<link rel="preload" href="/assets/style-BmL0kmLr.css" as="style"><link rel="stylesheet" href="/assets/style-BmL0kmLr.css">
<link rel="modulepreload" href="/assets/app-DPqZ-Olm.js"><link rel="modulepreload" href="/assets/404.html-quW2M2uK.js">
<link rel="prefetch" href="/assets/get-started.html-CZESuujR.js" as="script"><link rel="prefetch" href="/assets/lua.html-CwfoAtde.js" as="script"><link rel="prefetch" href="/assets/index.html-C2W3YGc4.js" as="script">
</head>
<body>
<div id="app"><!--[--><div class="vp-theme-container" vp-container data-v-d32690b4><main class="page" data-v-d32690b4><div vp-content data-v-d32690b4><h1 data-v-d32690b4>404</h1><blockquote data-v-d32690b4>How did we get here?</blockquote><a class="route-link" href="/" data-v-d32690b4>Take me home</a></div></main></div><!--[--><!----><!--]--><!--]--></div>
<script type="module" src="/assets/app-DPqZ-Olm.js" defer></script>
</body>
</html>

View File

@@ -0,0 +1 @@
import{_ as e,c as o,b as a,o as n}from"./app-DPqZ-Olm.js";const l={};function r(s,t){return n(),o("div",null,[...t[0]||(t[0]=[a("p",null,"404 Not Found",-1)])])}const _=e(l,[["render",r]]),d=JSON.parse('{"path":"/404.html","title":"","lang":"zh-CN","frontmatter":{"layout":"NotFound"},"headers":[],"git":{},"filePathRelative":null}');export{_ as comp,d as data};

File diff suppressed because one or more lines are too long

View File

@@ -0,0 +1 @@
import{_ as a,c as l,a as t,o as n}from"./app-DPqZ-Olm.js";const i={};function s(r,e){return n(),l("div",null,[...e[0]||(e[0]=[t('<h1 id="配置教程" tabindex="-1"><a class="header-anchor" href="#配置教程"><span>配置教程</span></a></h1><h2 id="准备工作" tabindex="-1"><a class="header-anchor" href="#准备工作"><span>准备工作</span></a></h2><p>首先,准备一台实体机/虚拟机,确保这台机器等于或大于以下配置:</p><ul><li>处理器:一核以上</li><li>内存512MB以上</li><li>硬盘512MB以上</li><li>一个键盘</li><li>一个蜂鸣器或音频输出设备</li><li>建议装上AMD驱动的网卡Intel驱动的网卡似乎无法运行</li></ul><h2 id="配置硬盘" tabindex="-1"><a class="header-anchor" href="#配置硬盘"><span>配置硬盘</span></a></h2><p>使用PE或其它工具格式化硬盘注意只分一个区文件系统选择FAT32</p><h2 id="安装cmleonos" tabindex="-1"><a class="header-anchor" href="#安装cmleonos"><span>安装CMLeonOS</span></a></h2><p>将CMLeonOS的ISO文件挂载到虚拟机或实体机上启动后按照提示进行 First time setup。</p><p>在 First time setup 中系统会让你配置用户名、密码、主机名配置完后会进行重启重启之后正常登陆系统然后就可以开始使用CMLeonOS了。</p>',9)])])}const c=a(i,[["render",s]]),h=JSON.parse('{"path":"/get-started.html","title":"配置教程","lang":"zh-CN","frontmatter":{},"headers":[{"level":2,"title":"准备工作","slug":"准备工作","link":"#准备工作","children":[]},{"level":2,"title":"配置硬盘","slug":"配置硬盘","link":"#配置硬盘","children":[]},{"level":2,"title":"安装CMLeonOS","slug":"安装cmleonos","link":"#安装cmleonos","children":[]}],"git":{},"filePathRelative":"get-started.md"}');export{c as comp,h as data};

View File

@@ -0,0 +1 @@
import{_ as t,c as e,o as a}from"./app-DPqZ-Olm.js";const i={};function l(n,o){return a(),e("div")}const r=t(i,[["render",l]]),c=JSON.parse('{"path":"/","title":"主页","lang":"zh-CN","frontmatter":{"home":true,"title":"主页","actions":[{"text":"开始配置","link":"/get-started.html","type":"primary"},{"text":"Lua 文档","link":"/lua.html","type":"secondary"}],"features":[{"title":"安全用户系统","details":"用户系统是直接绑定在内核下的,通过 SHA-256 密码哈希算法对用户密码进行加密存储,确保用户密码的安全性。"},{"title":"Lua 脚本支持","details":"CMLeonOS支持 Lua 脚本,用户可以通过 Lua 脚本实现自定义功能。"},{"title":"网络","details":"CMLeonOS支持 TCP/IP 协议栈,用户可以通过网络连接到其他设备。"},{"title":"FTP 服务器","details":"CMLeonOS支持 FTP 服务器,用户可以通过 FTP 协议上传下载文件。"},{"title":"内置编辑器","details":"CMLeonOS支持内置编辑器用户可以直接在CMLeonOS中编辑文件。"},{"title":"硬盘存储","details":"CMLeonOS支持硬盘存储用户可以将文件持久存储在硬盘中。"}]},"headers":[],"git":{},"filePathRelative":"README.md"}');export{r as comp,c as data};

File diff suppressed because one or more lines are too long

File diff suppressed because one or more lines are too long

File diff suppressed because one or more lines are too long

File diff suppressed because one or more lines are too long

View File

@@ -0,0 +1,317 @@
<!doctype html>
<html lang="zh-CN">
<head>
<meta charset="utf-8" />
<meta name="viewport" content="width=device-width,initial-scale=1" />
<meta name="generator" content="VuePress 2.0.0-rc.20" />
<style>
:root {
--vp-c-bg: #fff;
}
[data-theme='dark'] {
--vp-c-bg: #1b1b1f;
}
html,
body {
background-color: var(--vp-c-bg);
}
</style>
<script>
const useChoice = localStorage.getItem('vuepress-color-scheme')
const systemStatus =
'matchMedia' in window
? window.matchMedia('(prefers-color-scheme: dark)').matches
: false
if (useChoice === 'light') {
document.documentElement.dataset.theme = 'light'
} else if (useChoice === 'dark' || systemStatus) {
document.documentElement.dataset.theme = 'dark'
}
</script>
<title>CMLeonOS Lua API 文档 | CMLeonOS官方文档站</title><meta name="description" content="CMLeonOS是一个基于微内核架构的操作系统它的目标是提供一个简单、可靠、安全的操作系统环境。">
<link rel="preload" href="/assets/style-BmL0kmLr.css" as="style"><link rel="stylesheet" href="/assets/style-BmL0kmLr.css">
<link rel="modulepreload" href="/assets/app-DPqZ-Olm.js"><link rel="modulepreload" href="/assets/lua.html-CwfoAtde.js">
<link rel="prefetch" href="/assets/get-started.html-CZESuujR.js" as="script"><link rel="prefetch" href="/assets/index.html-C2W3YGc4.js" as="script"><link rel="prefetch" href="/assets/404.html-quW2M2uK.js" as="script">
</head>
<body>
<div id="app"><!--[--><div class="vp-theme-container external-link-icon" vp-container><!--[--><header class="vp-navbar" vp-navbar><div class="vp-toggle-sidebar-button" title="toggle sidebar" aria-expanded="false" role="button" tabindex="0"><div class="icon" aria-hidden="true"><span></span><span></span><span></span></div></div><span><a class="route-link" href="/"><!----><span class="vp-site-name" aria-hidden="true">CMLeonOS官方文档站</span></a></span><div class="vp-navbar-items-wrapper" style=""><!--[--><!--]--><nav class="vp-navbar-items vp-hide-mobile" aria-label="site navigation"><!--[--><div class="vp-navbar-item"><a class="route-link auto-link" href="/" aria-label="主页"><!--[--><!--[--><!--]--><!--]-->主页<!--[--><!--[--><!--]--><!--]--></a></div><div class="vp-navbar-item"><a class="route-link auto-link" href="/get-started.html" aria-label="配置教程"><!--[--><!--[--><!--]--><!--]-->配置教程<!--[--><!--[--><!--]--><!--]--></a></div><div class="vp-navbar-item"><a class="route-link route-link-active auto-link" href="/lua.html" aria-label="CMLeonOS Lua API 文档"><!--[--><!--[--><!--]--><!--]-->CMLeonOS Lua API 文档<!--[--><!--[--><!--]--><!--]--></a></div><!--]--></nav><!--[--><!--]--><button type="button" class="vp-toggle-color-mode-button" title="toggle color mode"><svg class="light-icon" viewbox="0 0 32 32" style=""><path d="M16 12.005a4 4 0 1 1-4 4a4.005 4.005 0 0 1 4-4m0-2a6 6 0 1 0 6 6a6 6 0 0 0-6-6z" fill="currentColor"></path><path d="M5.394 6.813l1.414-1.415l3.506 3.506L8.9 10.318z" fill="currentColor"></path><path d="M2 15.005h5v2H2z" fill="currentColor"></path><path d="M5.394 25.197L8.9 21.691l1.414 1.415l-3.506 3.505z" fill="currentColor"></path><path d="M15 25.005h2v5h-2z" fill="currentColor"></path><path d="M21.687 23.106l1.414-1.415l3.506 3.506l-1.414 1.414z" fill="currentColor"></path><path d="M25 15.005h5v2h-5z" fill="currentColor"></path><path d="M21.687 8.904l3.506-3.506l1.414 1.415l-3.506 3.505z" fill="currentColor"></path><path d="M15 2.005h2v5h-2z" fill="currentColor"></path></svg><svg class="dark-icon" viewbox="0 0 32 32" style="display:none;"><path d="M13.502 5.414a15.075 15.075 0 0 0 11.594 18.194a11.113 11.113 0 0 1-7.975 3.39c-.138 0-.278.005-.418 0a11.094 11.094 0 0 1-3.2-21.584M14.98 3a1.002 1.002 0 0 0-.175.016a13.096 13.096 0 0 0 1.825 25.981c.164.006.328 0 .49 0a13.072 13.072 0 0 0 10.703-5.555a1.01 1.01 0 0 0-.783-1.565A13.08 13.08 0 0 1 15.89 4.38A1.015 1.015 0 0 0 14.98 3z" fill="currentColor"></path></svg></button><!----></div></header><!--]--><div class="vp-sidebar-mask"></div><!--[--><aside class="vp-sidebar" vp-sidebar><nav class="vp-navbar-items" aria-label="site navigation"><!--[--><div class="vp-navbar-item"><a class="route-link auto-link" href="/" aria-label="主页"><!--[--><!--[--><!--]--><!--]-->主页<!--[--><!--[--><!--]--><!--]--></a></div><div class="vp-navbar-item"><a class="route-link auto-link" href="/get-started.html" aria-label="配置教程"><!--[--><!--[--><!--]--><!--]-->配置教程<!--[--><!--[--><!--]--><!--]--></a></div><div class="vp-navbar-item"><a class="route-link route-link-active auto-link" href="/lua.html" aria-label="CMLeonOS Lua API 文档"><!--[--><!--[--><!--]--><!--]-->CMLeonOS Lua API 文档<!--[--><!--[--><!--]--><!--]--></a></div><!--]--></nav><!--[--><!--]--><ul class="vp-sidebar-items"><!--[--><li><p tabindex="0" class="vp-sidebar-item vp-sidebar-heading">CMLeonOS Lua API 文档 <!----></p><!----></li><!--]--></ul><!--[--><!--]--></aside><!--]--><!--[--><main class="vp-page"><!--[--><!--]--><div vp-content><!--[--><!--]--><div><h1 id="cmleonos-lua-api-文档" tabindex="-1"><a class="header-anchor" href="#cmleonos-lua-api-文档"><span>CMLeonOS Lua API 文档</span></a></h1><p>本文档记录了 CMLeonOS 中 Lua 支持的所有函数和库。</p><h2 id="基础库-base" tabindex="-1"><a class="header-anchor" href="#基础库-base"><span>基础库 (base)</span></a></h2><h3 id="assert-v-message" tabindex="-1"><a class="header-anchor" href="#assert-v-message"><span>assert(v [, message])</span></a></h3><p>如果 v 为 false 或 nil则抛出错误。可选参数 message 为错误信息。</p><div class="language-lua line-numbers-mode" data-highlighter="prismjs" data-ext="lua"><pre><code><span class="line"><span class="token function">assert</span><span class="token punctuation">(</span><span class="token keyword">true</span><span class="token punctuation">,</span> <span class="token string">&quot;This should be true&quot;</span><span class="token punctuation">)</span></span>
<span class="line"><span class="token function">assert</span><span class="token punctuation">(</span><span class="token keyword">false</span><span class="token punctuation">,</span> <span class="token string">&quot;This is false&quot;</span><span class="token punctuation">)</span></span>
<span class="line"></span></code></pre><div class="line-numbers" aria-hidden="true" style="counter-reset:line-number 0;"><div class="line-number"></div><div class="line-number"></div></div></div><h3 id="collectgarbage-opt" tabindex="-1"><a class="header-anchor" href="#collectgarbage-opt"><span>collectgarbage([opt])</span></a></h3><p>垃圾回收控制。支持以下选项:</p><ul><li><code>&quot;collect&quot;</code> - 执行垃圾回收</li><li><code>&quot;count&quot;</code> - 返回当前内存使用量(千字节)</li><li><code>&quot;step&quot;</code> - 执行一步垃圾回收</li><li><code>&quot;isrunning&quot;</code> - 返回垃圾回收器是否在运行</li></ul><div class="language-lua line-numbers-mode" data-highlighter="prismjs" data-ext="lua"><pre><code><span class="line"><span class="token function">collectgarbage</span><span class="token punctuation">(</span><span class="token string">&quot;collect&quot;</span><span class="token punctuation">)</span></span>
<span class="line"><span class="token function">collectgarbage</span><span class="token punctuation">(</span><span class="token string">&quot;count&quot;</span><span class="token punctuation">)</span></span>
<span class="line"></span></code></pre><div class="line-numbers" aria-hidden="true" style="counter-reset:line-number 0;"><div class="line-number"></div><div class="line-number"></div></div></div><h3 id="dofile-filename" tabindex="-1"><a class="header-anchor" href="#dofile-filename"><span>dofile([filename])</span></a></h3><p>加载并执行指定文件。</p><div class="language-lua line-numbers-mode" data-highlighter="prismjs" data-ext="lua"><pre><code><span class="line"><span class="token function">dofile</span><span class="token punctuation">(</span><span class="token string">&quot;script.lua&quot;</span><span class="token punctuation">)</span></span>
<span class="line"></span></code></pre><div class="line-numbers" aria-hidden="true" style="counter-reset:line-number 0;"><div class="line-number"></div></div></div><h3 id="input-prompt" tabindex="-1"><a class="header-anchor" href="#input-prompt"><span>input([prompt])</span></a></h3><p>从控制台读取一行输入。</p><div class="language-lua line-numbers-mode" data-highlighter="prismjs" data-ext="lua"><pre><code><span class="line"><span class="token keyword">local</span> name <span class="token operator">=</span> <span class="token function">input</span><span class="token punctuation">(</span><span class="token string">&quot;Enter your name: &quot;</span><span class="token punctuation">)</span></span>
<span class="line"><span class="token function">print</span><span class="token punctuation">(</span><span class="token string">&quot;Hello, &quot;</span> <span class="token operator">..</span> name<span class="token punctuation">)</span></span>
<span class="line"></span></code></pre><div class="line-numbers" aria-hidden="true" style="counter-reset:line-number 0;"><div class="line-number"></div><div class="line-number"></div></div></div><h3 id="error-message-level" tabindex="-1"><a class="header-anchor" href="#error-message-level"><span>error(message [, level])</span></a></h3><p>抛出错误并终止当前受保护的调用。</p><div class="language-lua line-numbers-mode" data-highlighter="prismjs" data-ext="lua"><pre><code><span class="line"><span class="token function">error</span><span class="token punctuation">(</span><span class="token string">&quot;Something went wrong&quot;</span><span class="token punctuation">)</span></span>
<span class="line"></span></code></pre><div class="line-numbers" aria-hidden="true" style="counter-reset:line-number 0;"><div class="line-number"></div></div></div><h3 id="ipairs-t" tabindex="-1"><a class="header-anchor" href="#ipairs-t"><span>ipairs(t)</span></a></h3><p>遍历数组,返回迭代器函数。</p><div class="language-lua line-numbers-mode" data-highlighter="prismjs" data-ext="lua"><pre><code><span class="line"><span class="token keyword">for</span> i<span class="token punctuation">,</span> v <span class="token keyword">in</span> <span class="token function">ipairs</span><span class="token punctuation">(</span><span class="token punctuation">{</span><span class="token number">1</span><span class="token punctuation">,</span> <span class="token number">2</span><span class="token punctuation">,</span> <span class="token number">3</span><span class="token punctuation">}</span><span class="token punctuation">)</span> <span class="token keyword">do</span></span>
<span class="line"> <span class="token function">print</span><span class="token punctuation">(</span>i<span class="token punctuation">,</span> v<span class="token punctuation">)</span></span>
<span class="line"><span class="token keyword">end</span></span>
<span class="line"></span></code></pre><div class="line-numbers" aria-hidden="true" style="counter-reset:line-number 0;"><div class="line-number"></div><div class="line-number"></div><div class="line-number"></div></div></div><h3 id="loadfile-filename" tabindex="-1"><a class="header-anchor" href="#loadfile-filename"><span>loadfile([filename])</span></a></h3><p>加载文件但不执行,返回函数或 nil, error。</p><div class="language-lua line-numbers-mode" data-highlighter="prismjs" data-ext="lua"><pre><code><span class="line"><span class="token keyword">local</span> func<span class="token punctuation">,</span> err <span class="token operator">=</span> <span class="token function">loadfile</span><span class="token punctuation">(</span><span class="token string">&quot;script.lua&quot;</span><span class="token punctuation">)</span></span>
<span class="line"><span class="token keyword">if</span> func <span class="token keyword">then</span></span>
<span class="line"> <span class="token function">func</span><span class="token punctuation">(</span><span class="token punctuation">)</span></span>
<span class="line"><span class="token keyword">end</span></span>
<span class="line"></span></code></pre><div class="line-numbers" aria-hidden="true" style="counter-reset:line-number 0;"><div class="line-number"></div><div class="line-number"></div><div class="line-number"></div><div class="line-number"></div></div></div><h3 id="load-string-chunkname" tabindex="-1"><a class="header-anchor" href="#load-string-chunkname"><span>load(string [, chunkname])</span></a></h3><p>加载字符串但不执行,返回函数或 nil, error。</p><div class="language-lua line-numbers-mode" data-highlighter="prismjs" data-ext="lua"><pre><code><span class="line"><span class="token keyword">local</span> func <span class="token operator">=</span> <span class="token function">load</span><span class="token punctuation">(</span><span class="token string">&quot;print(&#39;Hello&#39;)&quot;</span><span class="token punctuation">)</span></span>
<span class="line"><span class="token keyword">if</span> func <span class="token keyword">then</span></span>
<span class="line"> <span class="token function">func</span><span class="token punctuation">(</span><span class="token punctuation">)</span></span>
<span class="line"><span class="token keyword">end</span></span>
<span class="line"></span></code></pre><div class="line-numbers" aria-hidden="true" style="counter-reset:line-number 0;"><div class="line-number"></div><div class="line-number"></div><div class="line-number"></div><div class="line-number"></div></div></div><h3 id="loadstring-string-chunkname" tabindex="-1"><a class="header-anchor" href="#loadstring-string-chunkname"><span>loadstring(string [, chunkname])</span></a></h3><p>加载字符串但不执行,返回函数或 nil, error。</p><div class="language-lua line-numbers-mode" data-highlighter="prismjs" data-ext="lua"><pre><code><span class="line"><span class="token keyword">local</span> func <span class="token operator">=</span> <span class="token function">loadstring</span><span class="token punctuation">(</span><span class="token string">&quot;print(&#39;Hello&#39;)&quot;</span><span class="token punctuation">)</span></span>
<span class="line"><span class="token keyword">if</span> func <span class="token keyword">then</span></span>
<span class="line"> <span class="token function">func</span><span class="token punctuation">(</span><span class="token punctuation">)</span></span>
<span class="line"><span class="token keyword">end</span></span>
<span class="line"></span></code></pre><div class="line-numbers" aria-hidden="true" style="counter-reset:line-number 0;"><div class="line-number"></div><div class="line-number"></div><div class="line-number"></div><div class="line-number"></div></div></div><h3 id="next-table-index" tabindex="-1"><a class="header-anchor" href="#next-table-index"><span>next(table [, index])</span></a></h3><p>返回表的下一个键值对。</p><div class="language-lua line-numbers-mode" data-highlighter="prismjs" data-ext="lua"><pre><code><span class="line">t <span class="token operator">=</span> <span class="token punctuation">{</span>a <span class="token operator">=</span> <span class="token number">1</span><span class="token punctuation">,</span> b <span class="token operator">=</span> <span class="token number">2</span><span class="token punctuation">}</span></span>
<span class="line"><span class="token keyword">local</span> k<span class="token punctuation">,</span> v <span class="token operator">=</span> <span class="token function">next</span><span class="token punctuation">(</span>t<span class="token punctuation">)</span></span>
<span class="line"><span class="token function">print</span><span class="token punctuation">(</span>k<span class="token punctuation">,</span> v<span class="token punctuation">)</span> <span class="token comment">-- a, 1</span></span>
<span class="line"></span></code></pre><div class="line-numbers" aria-hidden="true" style="counter-reset:line-number 0;"><div class="line-number"></div><div class="line-number"></div><div class="line-number"></div></div></div><h3 id="pairs-t" tabindex="-1"><a class="header-anchor" href="#pairs-t"><span>pairs(t)</span></a></h3><p>遍历表,返回迭代器函数。</p><div class="language-lua line-numbers-mode" data-highlighter="prismjs" data-ext="lua"><pre><code><span class="line">t <span class="token operator">=</span> <span class="token punctuation">{</span>x <span class="token operator">=</span> <span class="token number">1</span><span class="token punctuation">,</span> y <span class="token operator">=</span> <span class="token number">2</span><span class="token punctuation">,</span> z <span class="token operator">=</span> <span class="token number">3</span><span class="token punctuation">}</span></span>
<span class="line"><span class="token keyword">for</span> k<span class="token punctuation">,</span> v <span class="token keyword">in</span> <span class="token function">pairs</span><span class="token punctuation">(</span>t<span class="token punctuation">)</span> <span class="token keyword">do</span></span>
<span class="line"> <span class="token function">print</span><span class="token punctuation">(</span>k<span class="token punctuation">,</span> v<span class="token punctuation">)</span></span>
<span class="line"><span class="token keyword">end</span></span>
<span class="line"></span></code></pre><div class="line-numbers" aria-hidden="true" style="counter-reset:line-number 0;"><div class="line-number"></div><div class="line-number"></div><div class="line-number"></div><div class="line-number"></div></div></div><h3 id="pcall-f-arg1" tabindex="-1"><a class="header-anchor" href="#pcall-f-arg1"><span>pcall(f [, arg1, ...])</span></a></h3><p>安全调用函数,捕获错误。</p><div class="language-lua line-numbers-mode" data-highlighter="prismjs" data-ext="lua"><pre><code><span class="line"><span class="token keyword">local</span> status<span class="token punctuation">,</span> err <span class="token operator">=</span> <span class="token function">pcall</span><span class="token punctuation">(</span><span class="token keyword">function</span><span class="token punctuation">(</span><span class="token punctuation">)</span></span>
<span class="line"> <span class="token function">error</span><span class="token punctuation">(</span><span class="token string">&quot;Something went wrong&quot;</span><span class="token punctuation">)</span></span>
<span class="line"><span class="token keyword">end</span><span class="token punctuation">)</span></span>
<span class="line"><span class="token keyword">if</span> <span class="token keyword">not</span> status <span class="token keyword">then</span></span>
<span class="line"> <span class="token function">print</span><span class="token punctuation">(</span>err<span class="token punctuation">)</span></span>
<span class="line"><span class="token keyword">end</span></span>
<span class="line"></span></code></pre><div class="line-numbers" aria-hidden="true" style="counter-reset:line-number 0;"><div class="line-number"></div><div class="line-number"></div><div class="line-number"></div><div class="line-number"></div><div class="line-number"></div><div class="line-number"></div></div></div><h3 id="print" tabindex="-1"><a class="header-anchor" href="#print"><span>print(...)</span></a></h3><p>打印参数到控制台。</p><div class="language-lua line-numbers-mode" data-highlighter="prismjs" data-ext="lua"><pre><code><span class="line"><span class="token function">print</span><span class="token punctuation">(</span><span class="token string">&quot;Hello, World!&quot;</span><span class="token punctuation">)</span></span>
<span class="line"><span class="token function">print</span><span class="token punctuation">(</span><span class="token string">&quot;Value:&quot;</span><span class="token punctuation">,</span> <span class="token number">42</span><span class="token punctuation">)</span></span>
<span class="line"></span></code></pre><div class="line-numbers" aria-hidden="true" style="counter-reset:line-number 0;"><div class="line-number"></div><div class="line-number"></div></div></div><h3 id="rawequal-v1-v2" tabindex="-1"><a class="header-anchor" href="#rawequal-v1-v2"><span>rawequal(v1, v2)</span></a></h3><p>比较两个值是否相等(不使用元方法)。</p><div class="language-lua line-numbers-mode" data-highlighter="prismjs" data-ext="lua"><pre><code><span class="line"><span class="token function">print</span><span class="token punctuation">(</span><span class="token function">rawequal</span><span class="token punctuation">(</span><span class="token number">1</span><span class="token punctuation">,</span> <span class="token number">1</span><span class="token punctuation">)</span><span class="token punctuation">)</span> <span class="token comment">-- true</span></span>
<span class="line"><span class="token function">print</span><span class="token punctuation">(</span><span class="token function">rawequal</span><span class="token punctuation">(</span><span class="token number">1</span><span class="token punctuation">,</span> <span class="token number">2</span><span class="token punctuation">)</span><span class="token punctuation">)</span> <span class="token comment">-- false</span></span>
<span class="line"></span></code></pre><div class="line-numbers" aria-hidden="true" style="counter-reset:line-number 0;"><div class="line-number"></div><div class="line-number"></div></div></div><h3 id="rawlen-v" tabindex="-1"><a class="header-anchor" href="#rawlen-v"><span>rawlen(v)</span></a></h3><p>返回值的长度(不使用元方法)。</p><div class="language-lua line-numbers-mode" data-highlighter="prismjs" data-ext="lua"><pre><code><span class="line"><span class="token function">print</span><span class="token punctuation">(</span><span class="token function">rawlen</span><span class="token punctuation">(</span><span class="token string">&quot;hello&quot;</span><span class="token punctuation">)</span><span class="token punctuation">)</span> <span class="token comment">-- 5</span></span>
<span class="line"></span></code></pre><div class="line-numbers" aria-hidden="true" style="counter-reset:line-number 0;"><div class="line-number"></div></div></div><h3 id="rawget-table-index" tabindex="-1"><a class="header-anchor" href="#rawget-table-index"><span>rawget(table, index)</span></a></h3><p>获取表的值(不使用元方法)。</p><div class="language-lua line-numbers-mode" data-highlighter="prismjs" data-ext="lua"><pre><code><span class="line">t <span class="token operator">=</span> <span class="token function">setmetatable</span><span class="token punctuation">(</span><span class="token punctuation">{</span><span class="token punctuation">}</span><span class="token punctuation">,</span> <span class="token punctuation">{</span>__index <span class="token operator">=</span> <span class="token keyword">function</span><span class="token punctuation">(</span><span class="token punctuation">)</span> <span class="token keyword">return</span> <span class="token string">&quot;default&quot;</span> <span class="token keyword">end</span><span class="token punctuation">}</span><span class="token punctuation">)</span></span>
<span class="line"><span class="token function">print</span><span class="token punctuation">(</span><span class="token function">rawget</span><span class="token punctuation">(</span>t<span class="token punctuation">,</span> <span class="token string">&quot;key&quot;</span><span class="token punctuation">)</span><span class="token punctuation">)</span> <span class="token comment">-- default</span></span>
<span class="line"></span></code></pre><div class="line-numbers" aria-hidden="true" style="counter-reset:line-number 0;"><div class="line-number"></div><div class="line-number"></div></div></div><h3 id="rawset-table-index-value" tabindex="-1"><a class="header-anchor" href="#rawset-table-index-value"><span>rawset(table, index, value)</span></a></h3><p>设置表的值(不使用元方法)。</p><div class="language-lua line-numbers-mode" data-highlighter="prismjs" data-ext="lua"><pre><code><span class="line">t <span class="token operator">=</span> <span class="token punctuation">{</span><span class="token punctuation">}</span></span>
<span class="line"><span class="token function">rawset</span><span class="token punctuation">(</span>t<span class="token punctuation">,</span> <span class="token string">&quot;key&quot;</span><span class="token punctuation">,</span> <span class="token string">&quot;value&quot;</span><span class="token punctuation">)</span></span>
<span class="line"></span></code></pre><div class="line-numbers" aria-hidden="true" style="counter-reset:line-number 0;"><div class="line-number"></div><div class="line-number"></div></div></div><h3 id="select-index" tabindex="-1"><a class="header-anchor" href="#select-index"><span>select(index, ...)</span></a></h3><p>返回第 index 个参数。</p><div class="language-lua line-numbers-mode" data-highlighter="prismjs" data-ext="lua"><pre><code><span class="line"><span class="token function">print</span><span class="token punctuation">(</span><span class="token function">select</span><span class="token punctuation">(</span><span class="token number">2</span><span class="token punctuation">,</span> <span class="token string">&quot;a&quot;</span><span class="token punctuation">,</span> <span class="token string">&quot;b&quot;</span><span class="token punctuation">,</span> <span class="token string">&quot;c&quot;</span><span class="token punctuation">)</span><span class="token punctuation">)</span> <span class="token comment">-- c</span></span>
<span class="line"></span></code></pre><div class="line-numbers" aria-hidden="true" style="counter-reset:line-number 0;"><div class="line-number"></div></div></div><h3 id="getmetatable-object" tabindex="-1"><a class="header-anchor" href="#getmetatable-object"><span>getmetatable(object)</span></a></h3><p>返回对象的元表。</p><div class="language-lua line-numbers-mode" data-highlighter="prismjs" data-ext="lua"><pre><code><span class="line">t <span class="token operator">=</span> <span class="token punctuation">{</span><span class="token punctuation">}</span></span>
<span class="line">mt <span class="token operator">=</span> <span class="token punctuation">{</span>__add <span class="token operator">=</span> <span class="token keyword">function</span><span class="token punctuation">(</span>a<span class="token punctuation">,</span> b<span class="token punctuation">)</span> <span class="token keyword">return</span> a <span class="token operator">+</span> b <span class="token keyword">end</span><span class="token punctuation">}</span></span>
<span class="line"><span class="token function">setmetatable</span><span class="token punctuation">(</span>t<span class="token punctuation">,</span> mt<span class="token punctuation">)</span></span>
<span class="line"><span class="token function">print</span><span class="token punctuation">(</span><span class="token function">getmetatable</span><span class="token punctuation">(</span>t<span class="token punctuation">)</span><span class="token punctuation">.</span>__add<span class="token punctuation">)</span> <span class="token comment">-- function</span></span>
<span class="line"></span></code></pre><div class="line-numbers" aria-hidden="true" style="counter-reset:line-number 0;"><div class="line-number"></div><div class="line-number"></div><div class="line-number"></div><div class="line-number"></div></div></div><h3 id="setmetatable-table-metatable" tabindex="-1"><a class="header-anchor" href="#setmetatable-table-metatable"><span>setmetatable(table, metatable)</span></a></h3><p>设置对象的元表。</p><div class="language-lua line-numbers-mode" data-highlighter="prismjs" data-ext="lua"><pre><code><span class="line">t <span class="token operator">=</span> <span class="token punctuation">{</span><span class="token punctuation">}</span></span>
<span class="line">mt <span class="token operator">=</span> <span class="token punctuation">{</span>__add <span class="token operator">=</span> <span class="token keyword">function</span><span class="token punctuation">(</span>a<span class="token punctuation">,</span> b<span class="token punctuation">)</span> <span class="token keyword">return</span> a <span class="token operator">+</span> b <span class="token keyword">end</span><span class="token punctuation">}</span></span>
<span class="line"><span class="token function">setmetatable</span><span class="token punctuation">(</span>t<span class="token punctuation">,</span> mt<span class="token punctuation">)</span></span>
<span class="line"></span></code></pre><div class="line-numbers" aria-hidden="true" style="counter-reset:line-number 0;"><div class="line-number"></div><div class="line-number"></div><div class="line-number"></div></div></div><h3 id="tonumber-e-base" tabindex="-1"><a class="header-anchor" href="#tonumber-e-base"><span>tonumber(e [, base])</span></a></h3><p>将值转换为数字。</p><div class="language-lua line-numbers-mode" data-highlighter="prismjs" data-ext="lua"><pre><code><span class="line"><span class="token function">print</span><span class="token punctuation">(</span><span class="token function">tonumber</span><span class="token punctuation">(</span><span class="token string">&quot;123&quot;</span><span class="token punctuation">)</span><span class="token punctuation">)</span> <span class="token comment">-- 123</span></span>
<span class="line"><span class="token function">print</span><span class="token punctuation">(</span><span class="token function">tonumber</span><span class="token punctuation">(</span><span class="token string">&quot;FF&quot;</span><span class="token punctuation">,</span> <span class="token number">16</span><span class="token punctuation">)</span><span class="token punctuation">)</span> <span class="token comment">-- 255</span></span>
<span class="line"></span></code></pre><div class="line-numbers" aria-hidden="true" style="counter-reset:line-number 0;"><div class="line-number"></div><div class="line-number"></div></div></div><h3 id="tostring-v" tabindex="-1"><a class="header-anchor" href="#tostring-v"><span>tostring(v)</span></a></h3><p>将值转换为字符串。</p><div class="language-lua line-numbers-mode" data-highlighter="prismjs" data-ext="lua"><pre><code><span class="line"><span class="token function">print</span><span class="token punctuation">(</span><span class="token function">tostring</span><span class="token punctuation">(</span><span class="token number">123</span><span class="token punctuation">)</span><span class="token punctuation">)</span> <span class="token comment">-- &quot;123&quot;</span></span>
<span class="line"><span class="token function">print</span><span class="token punctuation">(</span><span class="token function">tostring</span><span class="token punctuation">(</span><span class="token punctuation">{</span><span class="token punctuation">}</span><span class="token punctuation">)</span><span class="token punctuation">)</span> <span class="token comment">-- &quot;table: 0x...&quot;</span></span>
<span class="line"></span></code></pre><div class="line-numbers" aria-hidden="true" style="counter-reset:line-number 0;"><div class="line-number"></div><div class="line-number"></div></div></div><h3 id="type-v" tabindex="-1"><a class="header-anchor" href="#type-v"><span>type(v)</span></a></h3><p>返回值的类型。</p><div class="language-lua line-numbers-mode" data-highlighter="prismjs" data-ext="lua"><pre><code><span class="line"><span class="token function">print</span><span class="token punctuation">(</span><span class="token function">type</span><span class="token punctuation">(</span><span class="token number">123</span><span class="token punctuation">)</span><span class="token punctuation">)</span> <span class="token comment">-- number</span></span>
<span class="line"><span class="token function">print</span><span class="token punctuation">(</span><span class="token function">type</span><span class="token punctuation">(</span><span class="token string">&quot;hello&quot;</span><span class="token punctuation">)</span><span class="token punctuation">)</span> <span class="token comment">-- string</span></span>
<span class="line"><span class="token function">print</span><span class="token punctuation">(</span><span class="token function">type</span><span class="token punctuation">(</span><span class="token punctuation">{</span><span class="token punctuation">}</span><span class="token punctuation">)</span><span class="token punctuation">)</span> <span class="token comment">-- table</span></span>
<span class="line"><span class="token function">print</span><span class="token punctuation">(</span><span class="token function">type</span><span class="token punctuation">(</span><span class="token keyword">nil</span><span class="token punctuation">)</span><span class="token punctuation">)</span> <span class="token comment">-- nil</span></span>
<span class="line"></span></code></pre><div class="line-numbers" aria-hidden="true" style="counter-reset:line-number 0;"><div class="line-number"></div><div class="line-number"></div><div class="line-number"></div><div class="line-number"></div></div></div><h3 id="xpcall-f-arg1" tabindex="-1"><a class="header-anchor" href="#xpcall-f-arg1"><span>xpcall(f [, arg1, ...])</span></a></h3><p>扩展的 pcall返回状态和错误。</p><div class="language-lua line-numbers-mode" data-highlighter="prismjs" data-ext="lua"><pre><code><span class="line"><span class="token keyword">local</span> ok<span class="token punctuation">,</span> err <span class="token operator">=</span> <span class="token function">xpcall</span><span class="token punctuation">(</span><span class="token keyword">function</span><span class="token punctuation">(</span><span class="token punctuation">)</span></span>
<span class="line"> <span class="token function">error</span><span class="token punctuation">(</span><span class="token string">&quot;Something went wrong&quot;</span><span class="token punctuation">)</span></span>
<span class="line"><span class="token keyword">end</span><span class="token punctuation">)</span></span>
<span class="line"><span class="token keyword">if</span> <span class="token keyword">not</span> ok <span class="token keyword">then</span></span>
<span class="line"> <span class="token function">print</span><span class="token punctuation">(</span>err<span class="token punctuation">)</span></span>
<span class="line"><span class="token keyword">end</span></span>
<span class="line"></span></code></pre><div class="line-numbers" aria-hidden="true" style="counter-reset:line-number 0;"><div class="line-number"></div><div class="line-number"></div><div class="line-number"></div><div class="line-number"></div><div class="line-number"></div><div class="line-number"></div></div></div><hr><h2 id="数学库-math" tabindex="-1"><a class="header-anchor" href="#数学库-math"><span>数学库 (math)</span></a></h2><h3 id="math-abs-x" tabindex="-1"><a class="header-anchor" href="#math-abs-x"><span>math.abs(x)</span></a></h3><p>返回 x 的绝对值。</p><div class="language-lua line-numbers-mode" data-highlighter="prismjs" data-ext="lua"><pre><code><span class="line"><span class="token function">print</span><span class="token punctuation">(</span>math<span class="token punctuation">.</span><span class="token function">abs</span><span class="token punctuation">(</span><span class="token operator">-</span><span class="token number">5</span><span class="token punctuation">)</span><span class="token punctuation">)</span> <span class="token comment">-- 5</span></span>
<span class="line"><span class="token function">print</span><span class="token punctuation">(</span>math<span class="token punctuation">.</span><span class="token function">abs</span><span class="token punctuation">(</span><span class="token number">5</span><span class="token punctuation">)</span><span class="token punctuation">)</span> <span class="token comment">-- 5</span></span>
<span class="line"></span></code></pre><div class="line-numbers" aria-hidden="true" style="counter-reset:line-number 0;"><div class="line-number"></div><div class="line-number"></div></div></div><h3 id="math-acos-x" tabindex="-1"><a class="header-anchor" href="#math-acos-x"><span>math.acos(x)</span></a></h3><p>返回 x 的反余弦值(弧度)。</p><div class="language-lua line-numbers-mode" data-highlighter="prismjs" data-ext="lua"><pre><code><span class="line"><span class="token function">print</span><span class="token punctuation">(</span>math<span class="token punctuation">.</span><span class="token function">acos</span><span class="token punctuation">(</span><span class="token number">0</span><span class="token punctuation">)</span><span class="token punctuation">)</span> <span class="token comment">-- 1.570796</span></span>
<span class="line"></span></code></pre><div class="line-numbers" aria-hidden="true" style="counter-reset:line-number 0;"><div class="line-number"></div></div></div><h3 id="math-asin-x" tabindex="-1"><a class="header-anchor" href="#math-asin-x"><span>math.asin(x)</span></a></h3><p>返回 x 的反正弦值(弧度)。</p><div class="language-lua line-numbers-mode" data-highlighter="prismjs" data-ext="lua"><pre><code><span class="line"><span class="token function">print</span><span class="token punctuation">(</span>math<span class="token punctuation">.</span><span class="token function">asin</span><span class="token punctuation">(</span><span class="token number">0</span><span class="token punctuation">)</span><span class="token punctuation">)</span> <span class="token comment">-- 0</span></span>
<span class="line"></span></code></pre><div class="line-numbers" aria-hidden="true" style="counter-reset:line-number 0;"><div class="line-number"></div></div></div><h3 id="math-atan2-y-x" tabindex="-1"><a class="header-anchor" href="#math-atan2-y-x"><span>math.atan2(y, x)</span></a></h3><p>返回 y/x 的反正切值(弧度)。</p><div class="language-lua line-numbers-mode" data-highlighter="prismjs" data-ext="lua"><pre><code><span class="line"><span class="token function">print</span><span class="token punctuation">(</span>math<span class="token punctuation">.</span><span class="token function">atan2</span><span class="token punctuation">(</span><span class="token number">0</span><span class="token punctuation">,</span> <span class="token number">1</span><span class="token punctuation">)</span><span class="token punctuation">)</span> <span class="token comment">-- 0</span></span>
<span class="line"></span></code></pre><div class="line-numbers" aria-hidden="true" style="counter-reset:line-number 0;"><div class="line-number"></div></div></div><h3 id="math-atan-x" tabindex="-1"><a class="header-anchor" href="#math-atan-x"><span>math.atan(x)</span></a></h3><p>返回 x 的反正切值(弧度)。</p><div class="language-lua line-numbers-mode" data-highlighter="prismjs" data-ext="lua"><pre><code><span class="line"><span class="token function">print</span><span class="token punctuation">(</span>math<span class="token punctuation">.</span><span class="token function">atan</span><span class="token punctuation">(</span><span class="token number">1</span><span class="token punctuation">)</span><span class="token punctuation">)</span> <span class="token comment">-- 0.785398</span></span>
<span class="line"></span></code></pre><div class="line-numbers" aria-hidden="true" style="counter-reset:line-number 0;"><div class="line-number"></div></div></div><h3 id="math-ceil-x" tabindex="-1"><a class="header-anchor" href="#math-ceil-x"><span>math.ceil(x)</span></a></h3><p>返回不小于 x 的最小整数。</p><div class="language-lua line-numbers-mode" data-highlighter="prismjs" data-ext="lua"><pre><code><span class="line"><span class="token function">print</span><span class="token punctuation">(</span>math<span class="token punctuation">.</span><span class="token function">ceil</span><span class="token punctuation">(</span><span class="token number">3.5</span><span class="token punctuation">)</span><span class="token punctuation">)</span> <span class="token comment">-- 4</span></span>
<span class="line"><span class="token function">print</span><span class="token punctuation">(</span>math<span class="token punctuation">.</span><span class="token function">ceil</span><span class="token punctuation">(</span><span class="token operator">-</span><span class="token number">3.5</span><span class="token punctuation">)</span><span class="token punctuation">)</span> <span class="token comment">-- -3</span></span>
<span class="line"></span></code></pre><div class="line-numbers" aria-hidden="true" style="counter-reset:line-number 0;"><div class="line-number"></div><div class="line-number"></div></div></div><h3 id="math-cosh-x" tabindex="-1"><a class="header-anchor" href="#math-cosh-x"><span>math.cosh(x)</span></a></h3><p>返回 x 的双曲余弦值。</p><div class="language-lua line-numbers-mode" data-highlighter="prismjs" data-ext="lua"><pre><code><span class="line"><span class="token function">print</span><span class="token punctuation">(</span>math<span class="token punctuation">.</span><span class="token function">cosh</span><span class="token punctuation">(</span><span class="token number">0</span><span class="token punctuation">)</span><span class="token punctuation">)</span> <span class="token comment">-- 1</span></span>
<span class="line"></span></code></pre><div class="line-numbers" aria-hidden="true" style="counter-reset:line-number 0;"><div class="line-number"></div></div></div><h3 id="math-cos-x" tabindex="-1"><a class="header-anchor" href="#math-cos-x"><span>math.cos(x)</span></a></h3><p>返回 x 的余弦值(弧度)。</p><div class="language-lua line-numbers-mode" data-highlighter="prismjs" data-ext="lua"><pre><code><span class="line"><span class="token function">print</span><span class="token punctuation">(</span>math<span class="token punctuation">.</span><span class="token function">cos</span><span class="token punctuation">(</span><span class="token number">0</span><span class="token punctuation">)</span><span class="token punctuation">)</span> <span class="token comment">-- 1</span></span>
<span class="line"><span class="token function">print</span><span class="token punctuation">(</span>math<span class="token punctuation">.</span><span class="token function">cos</span><span class="token punctuation">(</span>math<span class="token punctuation">.</span>pi<span class="token punctuation">)</span><span class="token punctuation">)</span> <span class="token comment">-- -1</span></span>
<span class="line"></span></code></pre><div class="line-numbers" aria-hidden="true" style="counter-reset:line-number 0;"><div class="line-number"></div><div class="line-number"></div></div></div><h3 id="math-deg-x" tabindex="-1"><a class="header-anchor" href="#math-deg-x"><span>math.deg(x)</span></a></h3><p>将弧度转换为角度。</p><div class="language-lua line-numbers-mode" data-highlighter="prismjs" data-ext="lua"><pre><code><span class="line"><span class="token function">print</span><span class="token punctuation">(</span>math<span class="token punctuation">.</span><span class="token function">deg</span><span class="token punctuation">(</span>math<span class="token punctuation">.</span>pi<span class="token punctuation">)</span><span class="token punctuation">)</span> <span class="token comment">-- 180</span></span>
<span class="line"></span></code></pre><div class="line-numbers" aria-hidden="true" style="counter-reset:line-number 0;"><div class="line-number"></div></div></div><h3 id="math-exp-x" tabindex="-1"><a class="header-anchor" href="#math-exp-x"><span>math.exp(x)</span></a></h3><p>返回 e 的 x 次方。</p><div class="language-lua line-numbers-mode" data-highlighter="prismjs" data-ext="lua"><pre><code><span class="line"><span class="token function">print</span><span class="token punctuation">(</span>math<span class="token punctuation">.</span><span class="token function">exp</span><span class="token punctuation">(</span><span class="token number">1</span><span class="token punctuation">)</span><span class="token punctuation">)</span> <span class="token comment">-- 2.718282</span></span>
<span class="line"></span></code></pre><div class="line-numbers" aria-hidden="true" style="counter-reset:line-number 0;"><div class="line-number"></div></div></div><h3 id="math-floor-x" tabindex="-1"><a class="header-anchor" href="#math-floor-x"><span>math.floor(x)</span></a></h3><p>返回不大于 x 的最大整数。</p><div class="language-lua line-numbers-mode" data-highlighter="prismjs" data-ext="lua"><pre><code><span class="line"><span class="token function">print</span><span class="token punctuation">(</span>math<span class="token punctuation">.</span><span class="token function">floor</span><span class="token punctuation">(</span><span class="token number">3.5</span><span class="token punctuation">)</span><span class="token punctuation">)</span> <span class="token comment">-- 3</span></span>
<span class="line"><span class="token function">print</span><span class="token punctuation">(</span>math<span class="token punctuation">.</span><span class="token function">floor</span><span class="token punctuation">(</span><span class="token operator">-</span><span class="token number">3.5</span><span class="token punctuation">)</span><span class="token punctuation">)</span> <span class="token comment">-- -4</span></span>
<span class="line"></span></code></pre><div class="line-numbers" aria-hidden="true" style="counter-reset:line-number 0;"><div class="line-number"></div><div class="line-number"></div></div></div><h3 id="math-fmod-x-y" tabindex="-1"><a class="header-anchor" href="#math-fmod-x-y"><span>math.fmod(x, y)</span></a></h3><p>返回 x 除以 y 的余数。</p><div class="language-lua line-numbers-mode" data-highlighter="prismjs" data-ext="lua"><pre><code><span class="line"><span class="token function">print</span><span class="token punctuation">(</span>math<span class="token punctuation">.</span><span class="token function">fmod</span><span class="token punctuation">(</span><span class="token number">7</span><span class="token punctuation">,</span> <span class="token number">3</span><span class="token punctuation">)</span><span class="token punctuation">)</span> <span class="token comment">-- 1</span></span>
<span class="line"></span></code></pre><div class="line-numbers" aria-hidden="true" style="counter-reset:line-number 0;"><div class="line-number"></div></div></div><h3 id="math-frexp-x" tabindex="-1"><a class="header-anchor" href="#math-frexp-x"><span>math.frexp(x)</span></a></h3><p>将 x 分解为尾数和指数。</p><div class="language-lua line-numbers-mode" data-highlighter="prismjs" data-ext="lua"><pre><code><span class="line"><span class="token keyword">local</span> m<span class="token punctuation">,</span> e <span class="token operator">=</span> math<span class="token punctuation">.</span><span class="token function">frexp</span><span class="token punctuation">(</span><span class="token number">1.5</span><span class="token punctuation">)</span></span>
<span class="line"><span class="token function">print</span><span class="token punctuation">(</span>m<span class="token punctuation">,</span> e<span class="token punctuation">)</span></span>
<span class="line"></span></code></pre><div class="line-numbers" aria-hidden="true" style="counter-reset:line-number 0;"><div class="line-number"></div><div class="line-number"></div></div></div><h3 id="math-ldexp-m-e" tabindex="-1"><a class="header-anchor" href="#math-ldexp-m-e"><span>math.ldexp(m, e)</span></a></h3><p>返回 m 乘以 2 的 e 次方。</p><div class="language-lua line-numbers-mode" data-highlighter="prismjs" data-ext="lua"><pre><code><span class="line"><span class="token function">print</span><span class="token punctuation">(</span>math<span class="token punctuation">.</span><span class="token function">ldexp</span><span class="token punctuation">(</span><span class="token number">1</span><span class="token punctuation">,</span> <span class="token number">2</span><span class="token punctuation">)</span><span class="token punctuation">)</span> <span class="token comment">-- 4</span></span>
<span class="line"></span></code></pre><div class="line-numbers" aria-hidden="true" style="counter-reset:line-number 0;"><div class="line-number"></div></div></div><h3 id="math-log10-x" tabindex="-1"><a class="header-anchor" href="#math-log10-x"><span>math.log10(x)</span></a></h3><p>返回 x 的以 10 为底的对数。</p><div class="language-lua line-numbers-mode" data-highlighter="prismjs" data-ext="lua"><pre><code><span class="line"><span class="token function">print</span><span class="token punctuation">(</span>math<span class="token punctuation">.</span><span class="token function">log10</span><span class="token punctuation">(</span><span class="token number">100</span><span class="token punctuation">)</span><span class="token punctuation">)</span> <span class="token comment">-- 2</span></span>
<span class="line"></span></code></pre><div class="line-numbers" aria-hidden="true" style="counter-reset:line-number 0;"><div class="line-number"></div></div></div><h3 id="math-log-x-base" tabindex="-1"><a class="header-anchor" href="#math-log-x-base"><span>math.log(x [, base])</span></a></h3><p>返回 x 的对数。默认以 e 为底。</p><div class="language-lua line-numbers-mode" data-highlighter="prismjs" data-ext="lua"><pre><code><span class="line"><span class="token function">print</span><span class="token punctuation">(</span>math<span class="token punctuation">.</span><span class="token function">log</span><span class="token punctuation">(</span><span class="token number">10</span><span class="token punctuation">)</span><span class="token punctuation">)</span> <span class="token comment">-- 2.302585</span></span>
<span class="line"><span class="token function">print</span><span class="token punctuation">(</span>math<span class="token punctuation">.</span><span class="token function">log</span><span class="token punctuation">(</span><span class="token number">100</span><span class="token punctuation">,</span> <span class="token number">10</span><span class="token punctuation">)</span><span class="token punctuation">)</span> <span class="token comment">-- 2</span></span>
<span class="line"></span></code></pre><div class="line-numbers" aria-hidden="true" style="counter-reset:line-number 0;"><div class="line-number"></div><div class="line-number"></div></div></div><h3 id="math-max-x1" tabindex="-1"><a class="header-anchor" href="#math-max-x1"><span>math.max(x1, ...)</span></a></h3><p>返回参数中的最大值。</p><div class="language-lua line-numbers-mode" data-highlighter="prismjs" data-ext="lua"><pre><code><span class="line"><span class="token function">print</span><span class="token punctuation">(</span>math<span class="token punctuation">.</span><span class="token function">max</span><span class="token punctuation">(</span><span class="token number">1</span><span class="token punctuation">,</span> <span class="token number">2</span><span class="token punctuation">,</span> <span class="token number">3</span><span class="token punctuation">)</span><span class="token punctuation">)</span> <span class="token comment">-- 3</span></span>
<span class="line"><span class="token function">print</span><span class="token punctuation">(</span>math<span class="token punctuation">.</span><span class="token function">max</span><span class="token punctuation">(</span><span class="token operator">-</span><span class="token number">5</span><span class="token punctuation">,</span> <span class="token operator">-</span><span class="token number">2</span><span class="token punctuation">,</span> <span class="token operator">-</span><span class="token number">1</span><span class="token punctuation">)</span><span class="token punctuation">)</span> <span class="token comment">-- -1</span></span>
<span class="line"></span></code></pre><div class="line-numbers" aria-hidden="true" style="counter-reset:line-number 0;"><div class="line-number"></div><div class="line-number"></div></div></div><h3 id="math-min-x1" tabindex="-1"><a class="header-anchor" href="#math-min-x1"><span>math.min(x1, ...)</span></a></h3><p>返回参数中的最小值。</p><div class="language-lua line-numbers-mode" data-highlighter="prismjs" data-ext="lua"><pre><code><span class="line"><span class="token function">print</span><span class="token punctuation">(</span>math<span class="token punctuation">.</span><span class="token function">min</span><span class="token punctuation">(</span><span class="token number">1</span><span class="token punctuation">,</span> <span class="token number">2</span><span class="token punctuation">,</span> <span class="token number">3</span><span class="token punctuation">)</span><span class="token punctuation">)</span> <span class="token comment">-- 1</span></span>
<span class="line"><span class="token function">print</span><span class="token punctuation">(</span>math<span class="token punctuation">.</span><span class="token function">min</span><span class="token punctuation">(</span><span class="token operator">-</span><span class="token number">5</span><span class="token punctuation">,</span> <span class="token operator">-</span><span class="token number">2</span><span class="token punctuation">,</span> <span class="token operator">-</span><span class="token number">1</span><span class="token punctuation">)</span><span class="token punctuation">)</span> <span class="token comment">-- -5</span></span>
<span class="line"></span></code></pre><div class="line-numbers" aria-hidden="true" style="counter-reset:line-number 0;"><div class="line-number"></div><div class="line-number"></div></div></div><h3 id="math-modf-x" tabindex="-1"><a class="header-anchor" href="#math-modf-x"><span>math.modf(x)</span></a></h3><p>将 x 分解为整数和小数部分。</p><div class="language-lua line-numbers-mode" data-highlighter="prismjs" data-ext="lua"><pre><code><span class="line"><span class="token keyword">local</span> i<span class="token punctuation">,</span> f <span class="token operator">=</span> math<span class="token punctuation">.</span><span class="token function">modf</span><span class="token punctuation">(</span><span class="token number">3.5</span><span class="token punctuation">)</span></span>
<span class="line"><span class="token function">print</span><span class="token punctuation">(</span>i<span class="token punctuation">,</span> f<span class="token punctuation">)</span></span>
<span class="line"></span></code></pre><div class="line-numbers" aria-hidden="true" style="counter-reset:line-number 0;"><div class="line-number"></div><div class="line-number"></div></div></div><h3 id="math-pow-x-y" tabindex="-1"><a class="header-anchor" href="#math-pow-x-y"><span>math.pow(x, y)</span></a></h3><p>返回 x 的 y 次方。</p><div class="language-lua line-numbers-mode" data-highlighter="prismjs" data-ext="lua"><pre><code><span class="line"><span class="token function">print</span><span class="token punctuation">(</span>math<span class="token punctuation">.</span><span class="token function">pow</span><span class="token punctuation">(</span><span class="token number">2</span><span class="token punctuation">,</span> <span class="token number">3</span><span class="token punctuation">)</span><span class="token punctuation">)</span> <span class="token comment">-- 8</span></span>
<span class="line"><span class="token function">print</span><span class="token punctuation">(</span>math<span class="token punctuation">.</span><span class="token function">pow</span><span class="token punctuation">(</span><span class="token number">10</span><span class="token punctuation">,</span> <span class="token number">2</span><span class="token punctuation">)</span><span class="token punctuation">)</span> <span class="token comment">-- 100</span></span>
<span class="line"></span></code></pre><div class="line-numbers" aria-hidden="true" style="counter-reset:line-number 0;"><div class="line-number"></div><div class="line-number"></div></div></div><h3 id="math-rad-x" tabindex="-1"><a class="header-anchor" href="#math-rad-x"><span>math.rad(x)</span></a></h3><p>将角度转换为弧度。</p><div class="language-lua line-numbers-mode" data-highlighter="prismjs" data-ext="lua"><pre><code><span class="line"><span class="token function">print</span><span class="token punctuation">(</span>math<span class="token punctuation">.</span><span class="token function">rad</span><span class="token punctuation">(</span><span class="token number">180</span><span class="token punctuation">)</span><span class="token punctuation">)</span> <span class="token comment">-- 3.141593</span></span>
<span class="line"></span></code></pre><div class="line-numbers" aria-hidden="true" style="counter-reset:line-number 0;"><div class="line-number"></div></div></div><h3 id="math-random-m-n" tabindex="-1"><a class="header-anchor" href="#math-random-m-n"><span>math.random([m [, n]])</span></a></h3><p>返回随机数。无参数返回 [0,1),一个参数返回 [1,m],两个参数返回 [m,n]。</p><div class="language-lua line-numbers-mode" data-highlighter="prismjs" data-ext="lua"><pre><code><span class="line"><span class="token function">print</span><span class="token punctuation">(</span>math<span class="token punctuation">.</span><span class="token function">random</span><span class="token punctuation">(</span><span class="token punctuation">)</span><span class="token punctuation">)</span> <span class="token comment">-- 0 或 1</span></span>
<span class="line"><span class="token function">print</span><span class="token punctuation">(</span>math<span class="token punctuation">.</span><span class="token function">random</span><span class="token punctuation">(</span><span class="token number">10</span><span class="token punctuation">)</span><span class="token punctuation">)</span> <span class="token comment">-- 1-10</span></span>
<span class="line"><span class="token function">print</span><span class="token punctuation">(</span>math<span class="token punctuation">.</span><span class="token function">random</span><span class="token punctuation">(</span><span class="token number">5</span><span class="token punctuation">,</span> <span class="token number">10</span><span class="token punctuation">)</span><span class="token punctuation">)</span> <span class="token comment">-- 5-10</span></span>
<span class="line"></span></code></pre><div class="line-numbers" aria-hidden="true" style="counter-reset:line-number 0;"><div class="line-number"></div><div class="line-number"></div><div class="line-number"></div></div></div><h3 id="math-randomseed-x" tabindex="-1"><a class="header-anchor" href="#math-randomseed-x"><span>math.randomseed(x)</span></a></h3><p>设置随机数生成器的种子。</p><div class="language-lua line-numbers-mode" data-highlighter="prismjs" data-ext="lua"><pre><code><span class="line">math<span class="token punctuation">.</span><span class="token function">randomseed</span><span class="token punctuation">(</span>os<span class="token punctuation">.</span><span class="token function">time</span><span class="token punctuation">(</span><span class="token punctuation">)</span><span class="token punctuation">)</span></span>
<span class="line"><span class="token function">print</span><span class="token punctuation">(</span>math<span class="token punctuation">.</span><span class="token function">random</span><span class="token punctuation">(</span><span class="token punctuation">)</span><span class="token punctuation">)</span></span>
<span class="line"></span></code></pre><div class="line-numbers" aria-hidden="true" style="counter-reset:line-number 0;"><div class="line-number"></div><div class="line-number"></div></div></div><h3 id="math-sinh-x" tabindex="-1"><a class="header-anchor" href="#math-sinh-x"><span>math.sinh(x)</span></a></h3><p>返回 x 的双曲正弦值。</p><div class="language-lua line-numbers-mode" data-highlighter="prismjs" data-ext="lua"><pre><code><span class="line"><span class="token function">print</span><span class="token punctuation">(</span>math<span class="token punctuation">.</span><span class="token function">sinh</span><span class="token punctuation">(</span><span class="token number">0</span><span class="token punctuation">)</span><span class="token punctuation">)</span> <span class="token comment">-- 0</span></span>
<span class="line"></span></code></pre><div class="line-numbers" aria-hidden="true" style="counter-reset:line-number 0;"><div class="line-number"></div></div></div><h3 id="math-sin-x" tabindex="-1"><a class="header-anchor" href="#math-sin-x"><span>math.sin(x)</span></a></h3><p>返回 x 的正弦值(弧度)。</p><div class="language-lua line-numbers-mode" data-highlighter="prismjs" data-ext="lua"><pre><code><span class="line"><span class="token function">print</span><span class="token punctuation">(</span>math<span class="token punctuation">.</span><span class="token function">sin</span><span class="token punctuation">(</span><span class="token number">0</span><span class="token punctuation">)</span><span class="token punctuation">)</span> <span class="token comment">-- 0</span></span>
<span class="line"><span class="token function">print</span><span class="token punctuation">(</span>math<span class="token punctuation">.</span><span class="token function">sin</span><span class="token punctuation">(</span>math<span class="token punctuation">.</span>pi<span class="token operator">/</span><span class="token number">2</span><span class="token punctuation">)</span><span class="token punctuation">)</span> <span class="token comment">-- 1</span></span>
<span class="line"></span></code></pre><div class="line-numbers" aria-hidden="true" style="counter-reset:line-number 0;"><div class="line-number"></div><div class="line-number"></div></div></div><h3 id="math-sqrt-x" tabindex="-1"><a class="header-anchor" href="#math-sqrt-x"><span>math.sqrt(x)</span></a></h3><p>返回 x 的平方根。</p><div class="language-lua line-numbers-mode" data-highlighter="prismjs" data-ext="lua"><pre><code><span class="line"><span class="token function">print</span><span class="token punctuation">(</span>math<span class="token punctuation">.</span><span class="token function">sqrt</span><span class="token punctuation">(</span><span class="token number">16</span><span class="token punctuation">)</span><span class="token punctuation">)</span> <span class="token comment">-- 4</span></span>
<span class="line"><span class="token function">print</span><span class="token punctuation">(</span>math<span class="token punctuation">.</span><span class="token function">sqrt</span><span class="token punctuation">(</span><span class="token number">2</span><span class="token punctuation">)</span><span class="token punctuation">)</span> <span class="token comment">-- 1.414214</span></span>
<span class="line"></span></code></pre><div class="line-numbers" aria-hidden="true" style="counter-reset:line-number 0;"><div class="line-number"></div><div class="line-number"></div></div></div><h3 id="math-tanh-x" tabindex="-1"><a class="header-anchor" href="#math-tanh-x"><span>math.tanh(x)</span></a></h3><p>返回 x 的双曲正切值。</p><div class="language-lua line-numbers-mode" data-highlighter="prismjs" data-ext="lua"><pre><code><span class="line"><span class="token function">print</span><span class="token punctuation">(</span>math<span class="token punctuation">.</span><span class="token function">tanh</span><span class="token punctuation">(</span><span class="token number">0</span><span class="token punctuation">)</span><span class="token punctuation">)</span> <span class="token comment">-- 0</span></span>
<span class="line"></span></code></pre><div class="line-numbers" aria-hidden="true" style="counter-reset:line-number 0;"><div class="line-number"></div></div></div><h3 id="math-tan-x" tabindex="-1"><a class="header-anchor" href="#math-tan-x"><span>math.tan(x)</span></a></h3><p>返回 x 的正切值(弧度)。</p><div class="language-lua line-numbers-mode" data-highlighter="prismjs" data-ext="lua"><pre><code><span class="line"><span class="token function">print</span><span class="token punctuation">(</span>math<span class="token punctuation">.</span><span class="token function">tan</span><span class="token punctuation">(</span><span class="token number">0</span><span class="token punctuation">)</span><span class="token punctuation">)</span> <span class="token comment">-- 0</span></span>
<span class="line"><span class="token function">print</span><span class="token punctuation">(</span>math<span class="token punctuation">.</span><span class="token function">tan</span><span class="token punctuation">(</span>math<span class="token punctuation">.</span>pi<span class="token operator">/</span><span class="token number">4</span><span class="token punctuation">)</span><span class="token punctuation">)</span> <span class="token comment">-- 1</span></span>
<span class="line"></span></code></pre><div class="line-numbers" aria-hidden="true" style="counter-reset:line-number 0;"><div class="line-number"></div><div class="line-number"></div></div></div><h3 id="math-pi" tabindex="-1"><a class="header-anchor" href="#math-pi"><span>math.pi</span></a></h3><p>圆周率常量。</p><div class="language-lua line-numbers-mode" data-highlighter="prismjs" data-ext="lua"><pre><code><span class="line"><span class="token function">print</span><span class="token punctuation">(</span>math<span class="token punctuation">.</span>pi<span class="token punctuation">)</span> <span class="token comment">-- 3.141592653589793</span></span>
<span class="line"></span></code></pre><div class="line-numbers" aria-hidden="true" style="counter-reset:line-number 0;"><div class="line-number"></div></div></div><h3 id="math-huge" tabindex="-1"><a class="header-anchor" href="#math-huge"><span>math.huge</span></a></h3><p>表示最大数值的常量。</p><div class="language-lua line-numbers-mode" data-highlighter="prismjs" data-ext="lua"><pre><code><span class="line"><span class="token function">print</span><span class="token punctuation">(</span>math<span class="token punctuation">.</span>huge<span class="token punctuation">)</span></span>
<span class="line"></span></code></pre><div class="line-numbers" aria-hidden="true" style="counter-reset:line-number 0;"><div class="line-number"></div></div></div><hr><h2 id="字符串库-string" tabindex="-1"><a class="header-anchor" href="#字符串库-string"><span>字符串库 (string)</span></a></h2><h3 id="string-byte-s-i-j" tabindex="-1"><a class="header-anchor" href="#string-byte-s-i-j"><span>string.byte(s [, i [, j]])</span></a></h3><p>返回字符的内部数值表示。</p><div class="language-lua line-numbers-mode" data-highlighter="prismjs" data-ext="lua"><pre><code><span class="line"><span class="token function">print</span><span class="token punctuation">(</span>string<span class="token punctuation">.</span><span class="token function">byte</span><span class="token punctuation">(</span><span class="token string">&quot;ABC&quot;</span><span class="token punctuation">)</span><span class="token punctuation">)</span> <span class="token comment">-- 65</span></span>
<span class="line"><span class="token function">print</span><span class="token punctuation">(</span>string<span class="token punctuation">.</span><span class="token function">byte</span><span class="token punctuation">(</span><span class="token string">&quot;ABC&quot;</span><span class="token punctuation">,</span> <span class="token number">2</span><span class="token punctuation">)</span><span class="token punctuation">)</span> <span class="token comment">-- 66</span></span>
<span class="line"><span class="token function">print</span><span class="token punctuation">(</span>string<span class="token punctuation">.</span><span class="token function">byte</span><span class="token punctuation">(</span><span class="token string">&quot;ABC&quot;</span><span class="token punctuation">,</span> <span class="token operator">-</span><span class="token number">1</span><span class="token punctuation">)</span><span class="token punctuation">)</span> <span class="token comment">-- 67</span></span>
<span class="line"></span></code></pre><div class="line-numbers" aria-hidden="true" style="counter-reset:line-number 0;"><div class="line-number"></div><div class="line-number"></div><div class="line-number"></div></div></div><h3 id="string-char" tabindex="-1"><a class="header-anchor" href="#string-char"><span>string.char(...)</span></a></h3><p>将数值转换为字符。</p><div class="language-lua line-numbers-mode" data-highlighter="prismjs" data-ext="lua"><pre><code><span class="line"><span class="token function">print</span><span class="token punctuation">(</span>string<span class="token punctuation">.</span><span class="token function">char</span><span class="token punctuation">(</span><span class="token number">65</span><span class="token punctuation">,</span> <span class="token number">66</span><span class="token punctuation">,</span> <span class="token number">67</span><span class="token punctuation">)</span><span class="token punctuation">)</span> <span class="token comment">-- ABC</span></span>
<span class="line"></span></code></pre><div class="line-numbers" aria-hidden="true" style="counter-reset:line-number 0;"><div class="line-number"></div></div></div><h3 id="string-dump-function" tabindex="-1"><a class="header-anchor" href="#string-dump-function"><span>string.dump(function)</span></a></h3><p>返回函数的二进制表示。</p><div class="language-lua line-numbers-mode" data-highlighter="prismjs" data-ext="lua"><pre><code><span class="line"><span class="token function">print</span><span class="token punctuation">(</span>string<span class="token punctuation">.</span><span class="token function">dump</span><span class="token punctuation">(</span>print<span class="token punctuation">)</span><span class="token punctuation">)</span></span>
<span class="line"></span></code></pre><div class="line-numbers" aria-hidden="true" style="counter-reset:line-number 0;"><div class="line-number"></div></div></div><h3 id="string-find-s-pattern-init-plain" tabindex="-1"><a class="header-anchor" href="#string-find-s-pattern-init-plain"><span>string.find(s, pattern [, init [, plain]])</span></a></h3><p>在字符串中查找模式。</p><div class="language-lua line-numbers-mode" data-highlighter="prismjs" data-ext="lua"><pre><code><span class="line"><span class="token function">print</span><span class="token punctuation">(</span>string<span class="token punctuation">.</span><span class="token function">find</span><span class="token punctuation">(</span><span class="token string">&quot;hello world&quot;</span><span class="token punctuation">,</span> <span class="token string">&quot;world&quot;</span><span class="token punctuation">)</span><span class="token punctuation">)</span> <span class="token comment">-- 7</span></span>
<span class="line"><span class="token function">print</span><span class="token punctuation">(</span>string<span class="token punctuation">.</span><span class="token function">find</span><span class="token punctuation">(</span><span class="token string">&quot;hello world&quot;</span><span class="token punctuation">,</span> <span class="token string">&quot;l&quot;</span><span class="token punctuation">)</span><span class="token punctuation">)</span> <span class="token comment">-- 3</span></span>
<span class="line"></span></code></pre><div class="line-numbers" aria-hidden="true" style="counter-reset:line-number 0;"><div class="line-number"></div><div class="line-number"></div></div></div><h3 id="string-format-formatstring" tabindex="-1"><a class="header-anchor" href="#string-format-formatstring"><span>string.format(formatstring, ...)</span></a></h3><p>格式化字符串。</p><div class="language-lua line-numbers-mode" data-highlighter="prismjs" data-ext="lua"><pre><code><span class="line"><span class="token function">print</span><span class="token punctuation">(</span>string<span class="token punctuation">.</span><span class="token function">format</span><span class="token punctuation">(</span><span class="token string">&quot;Value: %d&quot;</span><span class="token punctuation">,</span> <span class="token number">42</span><span class="token punctuation">)</span><span class="token punctuation">)</span></span>
<span class="line"><span class="token function">print</span><span class="token punctuation">(</span>string<span class="token punctuation">.</span><span class="token function">format</span><span class="token punctuation">(</span><span class="token string">&quot;Name: %s, Age: %d&quot;</span><span class="token punctuation">,</span> <span class="token string">&quot;Alice&quot;</span><span class="token punctuation">,</span> <span class="token number">30</span><span class="token punctuation">)</span><span class="token punctuation">)</span></span>
<span class="line"></span></code></pre><div class="line-numbers" aria-hidden="true" style="counter-reset:line-number 0;"><div class="line-number"></div><div class="line-number"></div></div></div><h3 id="string-gmatch-s-pattern" tabindex="-1"><a class="header-anchor" href="#string-gmatch-s-pattern"><span>string.gmatch(s, pattern)</span></a></h3><p>返回字符串中所有匹配模式的迭代器。</p><div class="language-lua line-numbers-mode" data-highlighter="prismjs" data-ext="lua"><pre><code><span class="line"><span class="token keyword">for</span> word <span class="token keyword">in</span> string<span class="token punctuation">.</span><span class="token function">gmatch</span><span class="token punctuation">(</span><span class="token string">&quot;hello world&quot;</span><span class="token punctuation">,</span> <span class="token string">&quot;%a+&quot;</span><span class="token punctuation">)</span> <span class="token keyword">do</span></span>
<span class="line"> <span class="token function">print</span><span class="token punctuation">(</span>word<span class="token punctuation">)</span></span>
<span class="line"><span class="token keyword">end</span></span>
<span class="line"></span></code></pre><div class="line-numbers" aria-hidden="true" style="counter-reset:line-number 0;"><div class="line-number"></div><div class="line-number"></div><div class="line-number"></div></div></div><h3 id="string-gsub-s-pattern-repl-n" tabindex="-1"><a class="header-anchor" href="#string-gsub-s-pattern-repl-n"><span>string.gsub(s, pattern, repl [, n])</span></a></h3><p>替换字符串中的模式。</p><div class="language-lua line-numbers-mode" data-highlighter="prismjs" data-ext="lua"><pre><code><span class="line"><span class="token function">print</span><span class="token punctuation">(</span>string<span class="token punctuation">.</span><span class="token function">gsub</span><span class="token punctuation">(</span><span class="token string">&quot;hello world&quot;</span><span class="token punctuation">,</span> <span class="token string">&quot;world&quot;</span><span class="token punctuation">,</span> <span class="token string">&quot;Lua&quot;</span><span class="token punctuation">)</span><span class="token punctuation">)</span> <span class="token comment">-- hello Lua</span></span>
<span class="line"><span class="token function">print</span><span class="token punctuation">(</span>string<span class="token punctuation">.</span><span class="token function">gsub</span><span class="token punctuation">(</span><span class="token string">&quot;hello world&quot;</span><span class="token punctuation">,</span> <span class="token string">&quot;l&quot;</span><span class="token punctuation">,</span> <span class="token string">&quot;L&quot;</span><span class="token punctuation">)</span><span class="token punctuation">)</span> <span class="token comment">-- HeLLo Lua</span></span>
<span class="line"></span></code></pre><div class="line-numbers" aria-hidden="true" style="counter-reset:line-number 0;"><div class="line-number"></div><div class="line-number"></div></div></div><h3 id="string-len-s" tabindex="-1"><a class="header-anchor" href="#string-len-s"><span>string.len(s)</span></a></h3><p>返回字符串长度。</p><div class="language-lua line-numbers-mode" data-highlighter="prismjs" data-ext="lua"><pre><code><span class="line"><span class="token function">print</span><span class="token punctuation">(</span>string<span class="token punctuation">.</span><span class="token function">len</span><span class="token punctuation">(</span><span class="token string">&quot;hello&quot;</span><span class="token punctuation">)</span><span class="token punctuation">)</span> <span class="token comment">-- 5</span></span>
<span class="line"></span></code></pre><div class="line-numbers" aria-hidden="true" style="counter-reset:line-number 0;"><div class="line-number"></div></div></div><h3 id="string-lower-s" tabindex="-1"><a class="header-anchor" href="#string-lower-s"><span>string.lower(s)</span></a></h3><p>将字符串转换为小写。</p><div class="language-lua line-numbers-mode" data-highlighter="prismjs" data-ext="lua"><pre><code><span class="line"><span class="token function">print</span><span class="token punctuation">(</span>string<span class="token punctuation">.</span><span class="token function">lower</span><span class="token punctuation">(</span><span class="token string">&quot;HELLO&quot;</span><span class="token punctuation">)</span><span class="token punctuation">)</span> <span class="token comment">-- hello</span></span>
<span class="line"></span></code></pre><div class="line-numbers" aria-hidden="true" style="counter-reset:line-number 0;"><div class="line-number"></div></div></div><h3 id="string-match-s-pattern-init" tabindex="-1"><a class="header-anchor" href="#string-match-s-pattern-init"><span>string.match(s, pattern [, init])</span></a></h3><p>返回字符串中第一个匹配模式的子串。</p><div class="language-lua line-numbers-mode" data-highlighter="prismjs" data-ext="lua"><pre><code><span class="line"><span class="token function">print</span><span class="token punctuation">(</span>string<span class="token punctuation">.</span><span class="token function">match</span><span class="token punctuation">(</span><span class="token string">&quot;hello world&quot;</span><span class="token punctuation">,</span> <span class="token string">&quot;%w+&quot;</span><span class="token punctuation">)</span><span class="token punctuation">)</span> <span class="token comment">-- hello</span></span>
<span class="line"></span></code></pre><div class="line-numbers" aria-hidden="true" style="counter-reset:line-number 0;"><div class="line-number"></div></div></div><h3 id="string-rep-s-n" tabindex="-1"><a class="header-anchor" href="#string-rep-s-n"><span>string.rep(s, n)</span></a></h3><p>重复字符串 n 次。</p><div class="language-lua line-numbers-mode" data-highlighter="prismjs" data-ext="lua"><pre><code><span class="line"><span class="token function">print</span><span class="token punctuation">(</span>string<span class="token punctuation">.</span><span class="token function">rep</span><span class="token punctuation">(</span><span class="token string">&quot;ab&quot;</span><span class="token punctuation">,</span> <span class="token number">3</span><span class="token punctuation">)</span><span class="token punctuation">)</span> <span class="token comment">-- ababab</span></span>
<span class="line"></span></code></pre><div class="line-numbers" aria-hidden="true" style="counter-reset:line-number 0;"><div class="line-number"></div></div></div><h3 id="string-reverse-s" tabindex="-1"><a class="header-anchor" href="#string-reverse-s"><span>string.reverse(s)</span></a></h3><p>反转字符串。</p><div class="language-lua line-numbers-mode" data-highlighter="prismjs" data-ext="lua"><pre><code><span class="line"><span class="token function">print</span><span class="token punctuation">(</span>string<span class="token punctuation">.</span><span class="token function">reverse</span><span class="token punctuation">(</span><span class="token string">&quot;hello&quot;</span><span class="token punctuation">)</span><span class="token punctuation">)</span> <span class="token comment">-- olleh</span></span>
<span class="line"></span></code></pre><div class="line-numbers" aria-hidden="true" style="counter-reset:line-number 0;"><div class="line-number"></div></div></div><h3 id="string-sub-s-i-j" tabindex="-1"><a class="header-anchor" href="#string-sub-s-i-j"><span>string.sub(s, i [, j])</span></a></h3><p>返回字符串的子串。</p><div class="language-lua line-numbers-mode" data-highlighter="prismjs" data-ext="lua"><pre><code><span class="line"><span class="token function">print</span><span class="token punctuation">(</span>string<span class="token punctuation">.</span><span class="token function">sub</span><span class="token punctuation">(</span><span class="token string">&quot;hello world&quot;</span><span class="token punctuation">,</span> <span class="token number">1</span><span class="token punctuation">,</span> <span class="token number">5</span><span class="token punctuation">)</span><span class="token punctuation">)</span> <span class="token comment">-- hello</span></span>
<span class="line"><span class="token function">print</span><span class="token punctuation">(</span>string<span class="token punctuation">.</span><span class="token function">sub</span><span class="token punctuation">(</span><span class="token string">&quot;hello world&quot;</span><span class="token punctuation">,</span> <span class="token number">7</span><span class="token punctuation">)</span><span class="token punctuation">)</span> <span class="token comment">-- world</span></span>
<span class="line"></span></code></pre><div class="line-numbers" aria-hidden="true" style="counter-reset:line-number 0;"><div class="line-number"></div><div class="line-number"></div></div></div><h3 id="string-upper-s" tabindex="-1"><a class="header-anchor" href="#string-upper-s"><span>string.upper(s)</span></a></h3><p>将字符串转换为大写。</p><div class="language-lua line-numbers-mode" data-highlighter="prismjs" data-ext="lua"><pre><code><span class="line"><span class="token function">print</span><span class="token punctuation">(</span>string<span class="token punctuation">.</span><span class="token function">upper</span><span class="token punctuation">(</span><span class="token string">&quot;hello&quot;</span><span class="token punctuation">)</span><span class="token punctuation">)</span> <span class="token comment">-- HELLO</span></span>
<span class="line"></span></code></pre><div class="line-numbers" aria-hidden="true" style="counter-reset:line-number 0;"><div class="line-number"></div></div></div><hr><h2 id="操作系统库-os" tabindex="-1"><a class="header-anchor" href="#操作系统库-os"><span>操作系统库 (os)</span></a></h2><h3 id="os-clock" tabindex="-1"><a class="header-anchor" href="#os-clock"><span>os.clock()</span></a></h3><p>返回程序使用的 CPU 时间(秒)。</p><div class="language-lua line-numbers-mode" data-highlighter="prismjs" data-ext="lua"><pre><code><span class="line"><span class="token function">print</span><span class="token punctuation">(</span>os<span class="token punctuation">.</span><span class="token function">clock</span><span class="token punctuation">(</span><span class="token punctuation">)</span><span class="token punctuation">)</span></span>
<span class="line"></span></code></pre><div class="line-numbers" aria-hidden="true" style="counter-reset:line-number 0;"><div class="line-number"></div></div></div><h3 id="os-gethostname" tabindex="-1"><a class="header-anchor" href="#os-gethostname"><span>os.gethostname()</span></a></h3><p>返回系统主机名。</p><div class="language-lua line-numbers-mode" data-highlighter="prismjs" data-ext="lua"><pre><code><span class="line"><span class="token function">print</span><span class="token punctuation">(</span>os<span class="token punctuation">.</span><span class="token function">gethostname</span><span class="token punctuation">(</span><span class="token punctuation">)</span><span class="token punctuation">)</span></span>
<span class="line"></span></code></pre><div class="line-numbers" aria-hidden="true" style="counter-reset:line-number 0;"><div class="line-number"></div></div></div><h3 id="os-getenv-varname" tabindex="-1"><a class="header-anchor" href="#os-getenv-varname"><span>os.getenv(varname)</span></a></h3><p>返回环境变量的值。</p><div class="language-lua line-numbers-mode" data-highlighter="prismjs" data-ext="lua"><pre><code><span class="line"><span class="token function">print</span><span class="token punctuation">(</span>os<span class="token punctuation">.</span><span class="token function">getenv</span><span class="token punctuation">(</span><span class="token string">&quot;PATH&quot;</span><span class="token punctuation">)</span><span class="token punctuation">)</span></span>
<span class="line"></span></code></pre><div class="line-numbers" aria-hidden="true" style="counter-reset:line-number 0;"><div class="line-number"></div></div></div><h3 id="os-setenv-varname-value" tabindex="-1"><a class="header-anchor" href="#os-setenv-varname-value"><span>os.setenv(varname, value)</span></a></h3><p>设置环境变量的值。</p><div class="language-lua line-numbers-mode" data-highlighter="prismjs" data-ext="lua"><pre><code><span class="line">os<span class="token punctuation">.</span><span class="token function">setenv</span><span class="token punctuation">(</span><span class="token string">&quot;MYVAR&quot;</span><span class="token punctuation">,</span> <span class="token string">&quot;value&quot;</span><span class="token punctuation">)</span></span>
<span class="line"></span></code></pre><div class="line-numbers" aria-hidden="true" style="counter-reset:line-number 0;"><div class="line-number"></div></div></div><h3 id="os-delenv-varname" tabindex="-1"><a class="header-anchor" href="#os-delenv-varname"><span>os.delenv(varname)</span></a></h3><p>删除环境变量。</p><div class="language-lua line-numbers-mode" data-highlighter="prismjs" data-ext="lua"><pre><code><span class="line">os<span class="token punctuation">.</span><span class="token function">delenv</span><span class="token punctuation">(</span><span class="token string">&quot;MYVAR&quot;</span><span class="token punctuation">)</span></span>
<span class="line"></span></code></pre><div class="line-numbers" aria-hidden="true" style="counter-reset:line-number 0;"><div class="line-number"></div></div></div><h3 id="os-addenv-varname-value" tabindex="-1"><a class="header-anchor" href="#os-addenv-varname-value"><span>os.addenv(varname, value)</span></a></h3><p>添加环境变量(同 setenv</p><div class="language-lua line-numbers-mode" data-highlighter="prismjs" data-ext="lua"><pre><code><span class="line">os<span class="token punctuation">.</span><span class="token function">addenv</span><span class="token punctuation">(</span><span class="token string">&quot;MYVAR&quot;</span><span class="token punctuation">,</span> <span class="token string">&quot;value&quot;</span><span class="token punctuation">)</span></span>
<span class="line"></span></code></pre><div class="line-numbers" aria-hidden="true" style="counter-reset:line-number 0;"><div class="line-number"></div></div></div><h3 id="os-execute-command" tabindex="-1"><a class="header-anchor" href="#os-execute-command"><span>os.execute(command)</span></a></h3><p>执行 Shell 命令。</p><div class="language-lua line-numbers-mode" data-highlighter="prismjs" data-ext="lua"><pre><code><span class="line">os<span class="token punctuation">.</span><span class="token function">execute</span><span class="token punctuation">(</span><span class="token string">&quot;ls&quot;</span><span class="token punctuation">)</span></span>
<span class="line">os<span class="token punctuation">.</span><span class="token function">execute</span><span class="token punctuation">(</span><span class="token string">&quot;echo Hello&quot;</span><span class="token punctuation">)</span></span>
<span class="line"></span></code></pre><div class="line-numbers" aria-hidden="true" style="counter-reset:line-number 0;"><div class="line-number"></div><div class="line-number"></div></div></div><h3 id="os-executefile-path" tabindex="-1"><a class="header-anchor" href="#os-executefile-path"><span>os.executefile(path)</span></a></h3><p>执行命令文件(.cm</p><div class="language-lua line-numbers-mode" data-highlighter="prismjs" data-ext="lua"><pre><code><span class="line">os<span class="token punctuation">.</span><span class="token function">executefile</span><span class="token punctuation">(</span><span class="token string">&quot;myscript.cm&quot;</span><span class="token punctuation">)</span></span>
<span class="line"></span></code></pre><div class="line-numbers" aria-hidden="true" style="counter-reset:line-number 0;"><div class="line-number"></div></div></div><h3 id="os-reboot" tabindex="-1"><a class="header-anchor" href="#os-reboot"><span>os.reboot()</span></a></h3><p>重启系统。</p><div class="language-lua line-numbers-mode" data-highlighter="prismjs" data-ext="lua"><pre><code><span class="line">os<span class="token punctuation">.</span><span class="token function">reboot</span><span class="token punctuation">(</span><span class="token punctuation">)</span></span>
<span class="line"></span></code></pre><div class="line-numbers" aria-hidden="true" style="counter-reset:line-number 0;"><div class="line-number"></div></div></div><h3 id="os-shutdown" tabindex="-1"><a class="header-anchor" href="#os-shutdown"><span>os.shutdown()</span></a></h3><p>关闭系统。</p><div class="language-lua line-numbers-mode" data-highlighter="prismjs" data-ext="lua"><pre><code><span class="line">os<span class="token punctuation">.</span><span class="token function">shutdown</span><span class="token punctuation">(</span><span class="token punctuation">)</span></span>
<span class="line"></span></code></pre><div class="line-numbers" aria-hidden="true" style="counter-reset:line-number 0;"><div class="line-number"></div></div></div><h3 id="os-sleep-seconds" tabindex="-1"><a class="header-anchor" href="#os-sleep-seconds"><span>os.sleep(seconds)</span></a></h3><p>休眠指定秒数。</p><div class="language-lua line-numbers-mode" data-highlighter="prismjs" data-ext="lua"><pre><code><span class="line">os<span class="token punctuation">.</span><span class="token function">sleep</span><span class="token punctuation">(</span><span class="token number">5</span><span class="token punctuation">)</span></span>
<span class="line"></span></code></pre><div class="line-numbers" aria-hidden="true" style="counter-reset:line-number 0;"><div class="line-number"></div></div></div><h3 id="os-beep" tabindex="-1"><a class="header-anchor" href="#os-beep"><span>os.beep()</span></a></h3><p>发出蜂鸣声。</p><div class="language-lua line-numbers-mode" data-highlighter="prismjs" data-ext="lua"><pre><code><span class="line">os<span class="token punctuation">.</span><span class="token function">beep</span><span class="token punctuation">(</span><span class="token punctuation">)</span></span>
<span class="line"></span></code></pre><div class="line-numbers" aria-hidden="true" style="counter-reset:line-number 0;"><div class="line-number"></div></div></div><h3 id="os-clear" tabindex="-1"><a class="header-anchor" href="#os-clear"><span>os.clear()</span></a></h3><p>清屏。</p><div class="language-lua line-numbers-mode" data-highlighter="prismjs" data-ext="lua"><pre><code><span class="line">os<span class="token punctuation">.</span><span class="token function">clear</span><span class="token punctuation">(</span><span class="token punctuation">)</span></span>
<span class="line"></span></code></pre><div class="line-numbers" aria-hidden="true" style="counter-reset:line-number 0;"><div class="line-number"></div></div></div><h3 id="os-getusername" tabindex="-1"><a class="header-anchor" href="#os-getusername"><span>os.getusername()</span></a></h3><p>返回当前登录用户名。</p><div class="language-lua line-numbers-mode" data-highlighter="prismjs" data-ext="lua"><pre><code><span class="line"><span class="token function">print</span><span class="token punctuation">(</span>os<span class="token punctuation">.</span><span class="token function">getusername</span><span class="token punctuation">(</span><span class="token punctuation">)</span><span class="token punctuation">)</span></span>
<span class="line"></span></code></pre><div class="line-numbers" aria-hidden="true" style="counter-reset:line-number 0;"><div class="line-number"></div></div></div><h3 id="os-isadmin" tabindex="-1"><a class="header-anchor" href="#os-isadmin"><span>os.isadmin()</span></a></h3><p>检查当前用户是否是管理员。</p><div class="language-lua line-numbers-mode" data-highlighter="prismjs" data-ext="lua"><pre><code><span class="line"><span class="token keyword">if</span> os<span class="token punctuation">.</span><span class="token function">isadmin</span><span class="token punctuation">(</span><span class="token punctuation">)</span> <span class="token keyword">then</span></span>
<span class="line"> <span class="token function">print</span><span class="token punctuation">(</span><span class="token string">&quot;User is admin&quot;</span><span class="token punctuation">)</span></span>
<span class="line"><span class="token keyword">else</span></span>
<span class="line"> <span class="token function">print</span><span class="token punctuation">(</span><span class="token string">&quot;User is not admin&quot;</span><span class="token punctuation">)</span></span>
<span class="line"><span class="token keyword">end</span></span>
<span class="line"></span></code></pre><div class="line-numbers" aria-hidden="true" style="counter-reset:line-number 0;"><div class="line-number"></div><div class="line-number"></div><div class="line-number"></div><div class="line-number"></div><div class="line-number"></div></div></div><h3 id="os-sha256-input" tabindex="-1"><a class="header-anchor" href="#os-sha256-input"><span>os.sha256(input)</span></a></h3><p>计算字符串的 SHA256 哈希值。</p><div class="language-lua line-numbers-mode" data-highlighter="prismjs" data-ext="lua"><pre><code><span class="line"><span class="token keyword">local</span> hash <span class="token operator">=</span> os<span class="token punctuation">.</span><span class="token function">sha256</span><span class="token punctuation">(</span><span class="token string">&quot;Hello World&quot;</span><span class="token punctuation">)</span></span>
<span class="line"><span class="token function">print</span><span class="token punctuation">(</span>hash<span class="token punctuation">)</span></span>
<span class="line"></span></code></pre><div class="line-numbers" aria-hidden="true" style="counter-reset:line-number 0;"><div class="line-number"></div><div class="line-number"></div></div></div><h3 id="os-base64encrypt-input" tabindex="-1"><a class="header-anchor" href="#os-base64encrypt-input"><span>os.base64encrypt(input)</span></a></h3><p>将字符串编码为 Base64。</p><div class="language-lua line-numbers-mode" data-highlighter="prismjs" data-ext="lua"><pre><code><span class="line"><span class="token keyword">local</span> encoded <span class="token operator">=</span> os<span class="token punctuation">.</span><span class="token function">base64encrypt</span><span class="token punctuation">(</span><span class="token string">&quot;Hello World&quot;</span><span class="token punctuation">)</span></span>
<span class="line"><span class="token function">print</span><span class="token punctuation">(</span>encoded<span class="token punctuation">)</span></span>
<span class="line"></span></code></pre><div class="line-numbers" aria-hidden="true" style="counter-reset:line-number 0;"><div class="line-number"></div><div class="line-number"></div></div></div><h3 id="os-base64decrypt-input" tabindex="-1"><a class="header-anchor" href="#os-base64decrypt-input"><span>os.base64decrypt(input)</span></a></h3><p>将 Base64 字符串解码。</p><div class="language-lua line-numbers-mode" data-highlighter="prismjs" data-ext="lua"><pre><code><span class="line"><span class="token keyword">local</span> decoded <span class="token operator">=</span> os<span class="token punctuation">.</span><span class="token function">base64decrypt</span><span class="token punctuation">(</span><span class="token string">&quot;SGVsbG8gV29ybGxcmVvcmxvYg==&quot;</span><span class="token punctuation">)</span></span>
<span class="line"><span class="token function">print</span><span class="token punctuation">(</span>decoded<span class="token punctuation">)</span></span>
<span class="line"></span></code></pre><div class="line-numbers" aria-hidden="true" style="counter-reset:line-number 0;"><div class="line-number"></div><div class="line-number"></div></div></div><hr><h2 id="输入输出库-io" tabindex="-1"><a class="header-anchor" href="#输入输出库-io"><span>输入输出库 (io)</span></a></h2><h3 id="io-close-file" tabindex="-1"><a class="header-anchor" href="#io-close-file"><span>io.close(file)</span></a></h3><p>关闭文件。</p><div class="language-lua line-numbers-mode" data-highlighter="prismjs" data-ext="lua"><pre><code><span class="line"><span class="token keyword">local</span> file <span class="token operator">=</span> io<span class="token punctuation">.</span><span class="token function">open</span><span class="token punctuation">(</span><span class="token string">&quot;test.txt&quot;</span><span class="token punctuation">,</span> <span class="token string">&quot;w&quot;</span><span class="token punctuation">)</span></span>
<span class="line">file<span class="token punctuation">:</span><span class="token function">write</span><span class="token punctuation">(</span><span class="token string">&quot;Hello&quot;</span><span class="token punctuation">)</span></span>
<span class="line">io<span class="token punctuation">.</span><span class="token function">close</span><span class="token punctuation">(</span>file<span class="token punctuation">)</span></span>
<span class="line"></span></code></pre><div class="line-numbers" aria-hidden="true" style="counter-reset:line-number 0;"><div class="line-number"></div><div class="line-number"></div><div class="line-number"></div></div></div><h3 id="io-flush" tabindex="-1"><a class="header-anchor" href="#io-flush"><span>io.flush()</span></a></h3><p>刷新所有打开文件的输出缓冲区。</p><div class="language-lua line-numbers-mode" data-highlighter="prismjs" data-ext="lua"><pre><code><span class="line">io<span class="token punctuation">.</span><span class="token function">flush</span><span class="token punctuation">(</span><span class="token punctuation">)</span></span>
<span class="line"></span></code></pre><div class="line-numbers" aria-hidden="true" style="counter-reset:line-number 0;"><div class="line-number"></div></div></div><h3 id="io-input-file" tabindex="-1"><a class="header-anchor" href="#io-input-file"><span>io.input([file])</span></a></h3><p>设置默认输入文件。</p><div class="language-lua line-numbers-mode" data-highlighter="prismjs" data-ext="lua"><pre><code><span class="line">io<span class="token punctuation">.</span><span class="token function">input</span><span class="token punctuation">(</span><span class="token string">&quot;input.txt&quot;</span><span class="token punctuation">)</span></span>
<span class="line"></span></code></pre><div class="line-numbers" aria-hidden="true" style="counter-reset:line-number 0;"><div class="line-number"></div></div></div><h3 id="io-lines-filename" tabindex="-1"><a class="header-anchor" href="#io-lines-filename"><span>io.lines([filename])</span></a></h3><p>返回文件行的迭代器。</p><div class="language-lua line-numbers-mode" data-highlighter="prismjs" data-ext="lua"><pre><code><span class="line"><span class="token keyword">for</span> line <span class="token keyword">in</span> io<span class="token punctuation">.</span><span class="token function">lines</span><span class="token punctuation">(</span><span class="token string">&quot;test.txt&quot;</span><span class="token punctuation">)</span> <span class="token keyword">do</span></span>
<span class="line"> <span class="token function">print</span><span class="token punctuation">(</span>line<span class="token punctuation">)</span></span>
<span class="line"><span class="token keyword">end</span></span>
<span class="line"></span></code></pre><div class="line-numbers" aria-hidden="true" style="counter-reset:line-number 0;"><div class="line-number"></div><div class="line-number"></div><div class="line-number"></div></div></div><h3 id="io-open-filename-mode" tabindex="-1"><a class="header-anchor" href="#io-open-filename-mode"><span>io.open(filename [, mode])</span></a></h3><p>打开文件,返回文件句柄。</p><div class="language-lua line-numbers-mode" data-highlighter="prismjs" data-ext="lua"><pre><code><span class="line"><span class="token keyword">local</span> file <span class="token operator">=</span> io<span class="token punctuation">.</span><span class="token function">open</span><span class="token punctuation">(</span><span class="token string">&quot;test.txt&quot;</span><span class="token punctuation">,</span> <span class="token string">&quot;r&quot;</span><span class="token punctuation">)</span></span>
<span class="line"><span class="token keyword">local</span> content <span class="token operator">=</span> file<span class="token punctuation">:</span><span class="token function">read</span><span class="token punctuation">(</span><span class="token string">&quot;*a&quot;</span><span class="token punctuation">)</span></span>
<span class="line">file<span class="token punctuation">:</span><span class="token function">close</span><span class="token punctuation">(</span><span class="token punctuation">)</span></span>
<span class="line"></span></code></pre><div class="line-numbers" aria-hidden="true" style="counter-reset:line-number 0;"><div class="line-number"></div><div class="line-number"></div><div class="line-number"></div></div></div><h3 id="io-output-file" tabindex="-1"><a class="header-anchor" href="#io-output-file"><span>io.output([file])</span></a></h3><p>设置默认输出文件。</p><div class="language-lua line-numbers-mode" data-highlighter="prismjs" data-ext="lua"><pre><code><span class="line">io<span class="token punctuation">.</span><span class="token function">output</span><span class="token punctuation">(</span><span class="token string">&quot;output.txt&quot;</span><span class="token punctuation">)</span></span>
<span class="line"></span></code></pre><div class="line-numbers" aria-hidden="true" style="counter-reset:line-number 0;"><div class="line-number"></div></div></div><h3 id="io-popen-prog-mode" tabindex="-1"><a class="header-anchor" href="#io-popen-prog-mode"><span>io.popen(prog [, mode])</span></a></h3><p>启动程序并返回文件句柄。</p><div class="language-lua line-numbers-mode" data-highlighter="prismjs" data-ext="lua"><pre><code><span class="line"><span class="token keyword">local</span> file <span class="token operator">=</span> io<span class="token punctuation">.</span><span class="token function">popen</span><span class="token punctuation">(</span><span class="token string">&quot;ls&quot;</span><span class="token punctuation">,</span> <span class="token string">&quot;r&quot;</span><span class="token punctuation">)</span></span>
<span class="line"><span class="token keyword">local</span> output <span class="token operator">=</span> file<span class="token punctuation">:</span><span class="token function">read</span><span class="token punctuation">(</span><span class="token string">&quot;*a&quot;</span><span class="token punctuation">)</span></span>
<span class="line">file<span class="token punctuation">:</span><span class="token function">close</span><span class="token punctuation">(</span><span class="token punctuation">)</span></span>
<span class="line"></span></code></pre><div class="line-numbers" aria-hidden="true" style="counter-reset:line-number 0;"><div class="line-number"></div><div class="line-number"></div><div class="line-number"></div></div></div><h3 id="io-read" tabindex="-1"><a class="header-anchor" href="#io-read"><span>io.read(...)</span></a></h3><p>从默认输入文件读取数据。</p><div class="language-lua line-numbers-mode" data-highlighter="prismjs" data-ext="lua"><pre><code><span class="line"><span class="token keyword">local</span> input <span class="token operator">=</span> io<span class="token punctuation">.</span><span class="token function">read</span><span class="token punctuation">(</span><span class="token punctuation">)</span></span>
<span class="line"><span class="token function">print</span><span class="token punctuation">(</span>input<span class="token punctuation">)</span></span>
<span class="line"></span></code></pre><div class="line-numbers" aria-hidden="true" style="counter-reset:line-number 0;"><div class="line-number"></div><div class="line-number"></div></div></div><h3 id="io-tmpfile" tabindex="-1"><a class="header-anchor" href="#io-tmpfile"><span>io.tmpfile()</span></a></h3><p>返回临时文件的句柄。</p><div class="language-lua line-numbers-mode" data-highlighter="prismjs" data-ext="lua"><pre><code><span class="line"><span class="token keyword">local</span> file <span class="token operator">=</span> io<span class="token punctuation">.</span><span class="token function">tmpfile</span><span class="token punctuation">(</span><span class="token punctuation">)</span></span>
<span class="line">file<span class="token punctuation">:</span><span class="token function">write</span><span class="token punctuation">(</span><span class="token string">&quot;temp data&quot;</span><span class="token punctuation">)</span></span>
<span class="line">file<span class="token punctuation">:</span><span class="token function">close</span><span class="token punctuation">(</span><span class="token punctuation">)</span></span>
<span class="line"></span></code></pre><div class="line-numbers" aria-hidden="true" style="counter-reset:line-number 0;"><div class="line-number"></div><div class="line-number"></div><div class="line-number"></div></div></div><h3 id="io-type-file" tabindex="-1"><a class="header-anchor" href="#io-type-file"><span>io.type(file)</span></a></h3><p>检查文件是否是打开的文件句柄。</p><div class="language-lua line-numbers-mode" data-highlighter="prismjs" data-ext="lua"><pre><code><span class="line"><span class="token keyword">local</span> file <span class="token operator">=</span> io<span class="token punctuation">.</span><span class="token function">open</span><span class="token punctuation">(</span><span class="token string">&quot;test.txt&quot;</span><span class="token punctuation">,</span> <span class="token string">&quot;r&quot;</span><span class="token punctuation">)</span></span>
<span class="line"><span class="token function">print</span><span class="token punctuation">(</span>io<span class="token punctuation">.</span><span class="token function">type</span><span class="token punctuation">(</span>file<span class="token punctuation">)</span><span class="token punctuation">)</span> <span class="token comment">-- file</span></span>
<span class="line"></span></code></pre><div class="line-numbers" aria-hidden="true" style="counter-reset:line-number 0;"><div class="line-number"></div><div class="line-number"></div></div></div><h3 id="io-write" tabindex="-1"><a class="header-anchor" href="#io-write"><span>io.write(...)</span></a></h3><p>写入数据到默认输出文件。</p><div class="language-lua line-numbers-mode" data-highlighter="prismjs" data-ext="lua"><pre><code><span class="line">io<span class="token punctuation">.</span><span class="token function">write</span><span class="token punctuation">(</span><span class="token string">&quot;Hello, World!\n&quot;</span><span class="token punctuation">)</span></span>
<span class="line"></span></code></pre><div class="line-numbers" aria-hidden="true" style="counter-reset:line-number 0;"><div class="line-number"></div></div></div><hr><h2 id="协程库-coroutine" tabindex="-1"><a class="header-anchor" href="#协程库-coroutine"><span>协程库 (coroutine)</span></a></h2><h3 id="coroutine-create-f" tabindex="-1"><a class="header-anchor" href="#coroutine-create-f"><span>coroutine.create(f)</span></a></h3><p>创建新的协程。</p><div class="language-lua line-numbers-mode" data-highlighter="prismjs" data-ext="lua"><pre><code><span class="line">co <span class="token operator">=</span> coroutine<span class="token punctuation">.</span><span class="token function">create</span><span class="token punctuation">(</span><span class="token keyword">function</span><span class="token punctuation">(</span><span class="token punctuation">)</span></span>
<span class="line"> <span class="token function">print</span><span class="token punctuation">(</span><span class="token string">&quot;Coroutine started&quot;</span><span class="token punctuation">)</span></span>
<span class="line"><span class="token keyword">end</span><span class="token punctuation">)</span></span>
<span class="line"></span></code></pre><div class="line-numbers" aria-hidden="true" style="counter-reset:line-number 0;"><div class="line-number"></div><div class="line-number"></div><div class="line-number"></div></div></div><h3 id="coroutine-resume-co-val1" tabindex="-1"><a class="header-anchor" href="#coroutine-resume-co-val1"><span>coroutine.resume(co [, val1, ...])</span></a></h3><p>继续或启动协程。</p><div class="language-lua line-numbers-mode" data-highlighter="prismjs" data-ext="lua"><pre><code><span class="line">coroutine<span class="token punctuation">.</span><span class="token function">resume</span><span class="token punctuation">(</span>co<span class="token punctuation">)</span></span>
<span class="line"></span></code></pre><div class="line-numbers" aria-hidden="true" style="counter-reset:line-number 0;"><div class="line-number"></div></div></div><h3 id="coroutine-running" tabindex="-1"><a class="header-anchor" href="#coroutine-running"><span>coroutine.running()</span></a></h3><p>返回当前运行的协程。</p><div class="language-lua line-numbers-mode" data-highlighter="prismjs" data-ext="lua"><pre><code><span class="line"><span class="token function">print</span><span class="token punctuation">(</span>coroutine<span class="token punctuation">.</span><span class="token function">running</span><span class="token punctuation">(</span><span class="token punctuation">)</span><span class="token punctuation">)</span></span>
<span class="line"></span></code></pre><div class="line-numbers" aria-hidden="true" style="counter-reset:line-number 0;"><div class="line-number"></div></div></div><h3 id="coroutine-status-co" tabindex="-1"><a class="header-anchor" href="#coroutine-status-co"><span>coroutine.status(co)</span></a></h3><p>返回协程的状态。</p><div class="language-lua line-numbers-mode" data-highlighter="prismjs" data-ext="lua"><pre><code><span class="line"><span class="token function">print</span><span class="token punctuation">(</span>coroutine<span class="token punctuation">.</span><span class="token function">status</span><span class="token punctuation">(</span>co<span class="token punctuation">)</span><span class="token punctuation">)</span> <span class="token comment">-- running, suspended, normal, dead</span></span>
<span class="line"></span></code></pre><div class="line-numbers" aria-hidden="true" style="counter-reset:line-number 0;"><div class="line-number"></div></div></div><h3 id="coroutine-wrap-f" tabindex="-1"><a class="header-anchor" href="#coroutine-wrap-f"><span>coroutine.wrap(f)</span></a></h3><p>创建包装函数的函数。</p><div class="language-lua line-numbers-mode" data-highlighter="prismjs" data-ext="lua"><pre><code><span class="line">co <span class="token operator">=</span> coroutine<span class="token punctuation">.</span><span class="token function">create</span><span class="token punctuation">(</span><span class="token keyword">function</span><span class="token punctuation">(</span><span class="token punctuation">)</span></span>
<span class="line"> <span class="token function">print</span><span class="token punctuation">(</span><span class="token string">&quot;Coroutine&quot;</span><span class="token punctuation">)</span></span>
<span class="line"><span class="token keyword">end</span><span class="token punctuation">)</span></span>
<span class="line"><span class="token keyword">local</span> wrapped <span class="token operator">=</span> coroutine<span class="token punctuation">.</span><span class="token function">wrap</span><span class="token punctuation">(</span>co<span class="token punctuation">)</span></span>
<span class="line"><span class="token function">wrapped</span><span class="token punctuation">(</span><span class="token punctuation">)</span></span>
<span class="line"></span></code></pre><div class="line-numbers" aria-hidden="true" style="counter-reset:line-number 0;"><div class="line-number"></div><div class="line-number"></div><div class="line-number"></div><div class="line-number"></div><div class="line-number"></div></div></div><h3 id="coroutine-yield" tabindex="-1"><a class="header-anchor" href="#coroutine-yield"><span>coroutine.yield(...)</span></a></h3><p>挂起当前协程。</p><div class="language-lua line-numbers-mode" data-highlighter="prismjs" data-ext="lua"><pre><code><span class="line">coroutine<span class="token punctuation">.</span><span class="token function">yield</span><span class="token punctuation">(</span><span class="token string">&quot;value&quot;</span><span class="token punctuation">)</span></span>
<span class="line"></span></code></pre><div class="line-numbers" aria-hidden="true" style="counter-reset:line-number 0;"><div class="line-number"></div></div></div><hr><h2 id="表库-table" tabindex="-1"><a class="header-anchor" href="#表库-table"><span>表库 (table)</span></a></h2><h3 id="table-concat-list-sep-i-j" tabindex="-1"><a class="header-anchor" href="#table-concat-list-sep-i-j"><span>table.concat(list [, sep [, i [, j]])</span></a></h3><p>连接表中的元素。</p><div class="language-lua line-numbers-mode" data-highlighter="prismjs" data-ext="lua"><pre><code><span class="line">t <span class="token operator">=</span> <span class="token punctuation">{</span><span class="token string">&quot;a&quot;</span><span class="token punctuation">,</span> <span class="token string">&quot;b&quot;</span><span class="token punctuation">,</span> <span class="token string">&quot;c&quot;</span><span class="token punctuation">}</span></span>
<span class="line"><span class="token function">print</span><span class="token punctuation">(</span>table<span class="token punctuation">.</span><span class="token function">concat</span><span class="token punctuation">(</span>t<span class="token punctuation">,</span> <span class="token string">&quot;, &quot;</span><span class="token punctuation">)</span><span class="token punctuation">)</span> <span class="token comment">-- a, b, c</span></span>
<span class="line"></span></code></pre><div class="line-numbers" aria-hidden="true" style="counter-reset:line-number 0;"><div class="line-number"></div><div class="line-number"></div></div></div><h3 id="table-insert-list-pos-value" tabindex="-1"><a class="header-anchor" href="#table-insert-list-pos-value"><span>table.insert(list, [pos,] value)</span></a></h3><p>在表中插入元素。</p><div class="language-lua line-numbers-mode" data-highlighter="prismjs" data-ext="lua"><pre><code><span class="line">t <span class="token operator">=</span> <span class="token punctuation">{</span><span class="token number">1</span><span class="token punctuation">,</span> <span class="token number">2</span><span class="token punctuation">,</span> <span class="token number">3</span><span class="token punctuation">}</span></span>
<span class="line">table<span class="token punctuation">.</span><span class="token function">insert</span><span class="token punctuation">(</span>t<span class="token punctuation">,</span> <span class="token number">4</span><span class="token punctuation">)</span></span>
<span class="line"></span></code></pre><div class="line-numbers" aria-hidden="true" style="counter-reset:line-number 0;"><div class="line-number"></div><div class="line-number"></div></div></div><h3 id="table-maxn-t" tabindex="-1"><a class="header-anchor" href="#table-maxn-t"><span>table.maxn(t)</span></a></h3><p>返回表的最大数字索引(已弃用,使用 # 运算符)。</p><div class="language-lua line-numbers-mode" data-highlighter="prismjs" data-ext="lua"><pre><code><span class="line">t <span class="token operator">=</span> <span class="token punctuation">{</span><span class="token number">1</span><span class="token punctuation">,</span> <span class="token number">2</span><span class="token punctuation">,</span> <span class="token keyword">nil</span><span class="token punctuation">,</span> <span class="token number">4</span><span class="token punctuation">}</span></span>
<span class="line"><span class="token function">print</span><span class="token punctuation">(</span>table<span class="token punctuation">.</span><span class="token function">maxn</span><span class="token punctuation">(</span>t<span class="token punctuation">)</span><span class="token punctuation">)</span> <span class="token comment">-- 4</span></span>
<span class="line"></span></code></pre><div class="line-numbers" aria-hidden="true" style="counter-reset:line-number 0;"><div class="line-number"></div><div class="line-number"></div></div></div><h3 id="table-remove-list-pos" tabindex="-1"><a class="header-anchor" href="#table-remove-list-pos"><span>table.remove(list [, pos])</span></a></h3><p>从表中删除元素。</p><div class="language-lua line-numbers-mode" data-highlighter="prismjs" data-ext="lua"><pre><code><span class="line">t <span class="token operator">=</span> <span class="token punctuation">{</span><span class="token number">1</span><span class="token punctuation">,</span> <span class="token number">2</span><span class="token punctuation">,</span> <span class="token number">3</span><span class="token punctuation">}</span></span>
<span class="line">table<span class="token punctuation">.</span><span class="token function">remove</span><span class="token punctuation">(</span>t<span class="token punctuation">,</span> <span class="token number">2</span><span class="token punctuation">)</span></span>
<span class="line"></span></code></pre><div class="line-numbers" aria-hidden="true" style="counter-reset:line-number 0;"><div class="line-number"></div><div class="line-number"></div></div></div><h3 id="table-sort-list-comp" tabindex="-1"><a class="header-anchor" href="#table-sort-list-comp"><span>table.sort(list [, comp])</span></a></h3><p>对表进行排序。</p><div class="language-lua line-numbers-mode" data-highlighter="prismjs" data-ext="lua"><pre><code><span class="line">t <span class="token operator">=</span> <span class="token punctuation">{</span><span class="token number">3</span><span class="token punctuation">,</span> <span class="token number">1</span><span class="token punctuation">,</span> <span class="token number">4</span><span class="token punctuation">,</span> <span class="token number">2</span><span class="token punctuation">}</span></span>
<span class="line">table<span class="token punctuation">.</span><span class="token function">sort</span><span class="token punctuation">(</span>t<span class="token punctuation">)</span></span>
<span class="line"></span></code></pre><div class="line-numbers" aria-hidden="true" style="counter-reset:line-number 0;"><div class="line-number"></div><div class="line-number"></div></div></div><hr><h2 id="调试库-debug" tabindex="-1"><a class="header-anchor" href="#调试库-debug"><span>调试库 (debug)</span></a></h2><h3 id="debug-debug" tabindex="-1"><a class="header-anchor" href="#debug-debug"><span>debug.debug()</span></a></h3><p>进入调试模式。</p><div class="language-lua line-numbers-mode" data-highlighter="prismjs" data-ext="lua"><pre><code><span class="line">debug<span class="token punctuation">.</span><span class="token function">debug</span><span class="token punctuation">(</span><span class="token punctuation">)</span></span>
<span class="line"></span></code></pre><div class="line-numbers" aria-hidden="true" style="counter-reset:line-number 0;"><div class="line-number"></div></div></div><h3 id="debug-getfenv-object" tabindex="-1"><a class="header-anchor" href="#debug-getfenv-object"><span>debug.getfenv(object)</span></a></h3><p>返回对象的环境。</p><div class="language-lua line-numbers-mode" data-highlighter="prismjs" data-ext="lua"><pre><code><span class="line"><span class="token function">print</span><span class="token punctuation">(</span>debug<span class="token punctuation">.</span><span class="token function">getfenv</span><span class="token punctuation">(</span><span class="token keyword">function</span><span class="token punctuation">(</span><span class="token punctuation">)</span> <span class="token keyword">return</span> x <span class="token keyword">end</span><span class="token punctuation">)</span><span class="token punctuation">)</span></span>
<span class="line"></span></code></pre><div class="line-numbers" aria-hidden="true" style="counter-reset:line-number 0;"><div class="line-number"></div></div></div><h3 id="debug-gethook" tabindex="-1"><a class="header-anchor" href="#debug-gethook"><span>debug.gethook()</span></a></h3><p>返回当前的钩子函数。</p><div class="language-lua line-numbers-mode" data-highlighter="prismjs" data-ext="lua"><pre><code><span class="line"><span class="token function">print</span><span class="token punctuation">(</span>debug<span class="token punctuation">.</span><span class="token function">gethook</span><span class="token punctuation">(</span><span class="token punctuation">)</span><span class="token punctuation">)</span></span>
<span class="line"></span></code></pre><div class="line-numbers" aria-hidden="true" style="counter-reset:line-number 0;"><div class="line-number"></div></div></div><h3 id="debug-getinfo-thread-f-what" tabindex="-1"><a class="header-anchor" href="#debug-getinfo-thread-f-what"><span>debug.getinfo([thread [, f [, what]])</span></a></h3><p>返回函数的信息。</p><div class="language-lua line-numbers-mode" data-highlighter="prismjs" data-ext="lua"><pre><code><span class="line"><span class="token function">print</span><span class="token punctuation">(</span>debug<span class="token punctuation">.</span><span class="token function">getinfo</span><span class="token punctuation">(</span><span class="token number">1</span><span class="token punctuation">)</span><span class="token punctuation">)</span></span>
<span class="line"></span></code></pre><div class="line-numbers" aria-hidden="true" style="counter-reset:line-number 0;"><div class="line-number"></div></div></div><h3 id="debug-getlocal-thread-f-loc" tabindex="-1"><a class="header-anchor" href="#debug-getlocal-thread-f-loc"><span>debug.getlocal([thread [, f [, loc]])</span></a></h3><p>返回函数的局部变量。</p><div class="language-lua line-numbers-mode" data-highlighter="prismjs" data-ext="lua"><pre><code><span class="line"><span class="token function">print</span><span class="token punctuation">(</span>debug<span class="token punctuation">.</span><span class="token function">getlocal</span><span class="token punctuation">(</span><span class="token number">1</span><span class="token punctuation">,</span> <span class="token number">1</span><span class="token punctuation">)</span><span class="token punctuation">)</span></span>
<span class="line"></span></code></pre><div class="line-numbers" aria-hidden="true" style="counter-reset:line-number 0;"><div class="line-number"></div></div></div><h3 id="debug-getmetatable-object" tabindex="-1"><a class="header-anchor" href="#debug-getmetatable-object"><span>debug.getmetatable(object)</span></a></h3><p>返回对象的元表。</p><div class="language-lua line-numbers-mode" data-highlighter="prismjs" data-ext="lua"><pre><code><span class="line">t <span class="token operator">=</span> <span class="token punctuation">{</span><span class="token punctuation">}</span></span>
<span class="line">mt <span class="token operator">=</span> <span class="token punctuation">{</span>__add <span class="token operator">=</span> <span class="token keyword">function</span><span class="token punctuation">(</span>a<span class="token punctuation">,</span> b<span class="token punctuation">)</span> <span class="token keyword">return</span> a <span class="token operator">+</span> b <span class="token keyword">end</span><span class="token punctuation">}</span></span>
<span class="line"><span class="token function">setmetatable</span><span class="token punctuation">(</span>t<span class="token punctuation">,</span> mt<span class="token punctuation">)</span></span>
<span class="line"><span class="token function">print</span><span class="token punctuation">(</span>debug<span class="token punctuation">.</span><span class="token function">getmetatable</span><span class="token punctuation">(</span>t<span class="token punctuation">)</span><span class="token punctuation">.</span>__add<span class="token punctuation">)</span></span>
<span class="line"></span></code></pre><div class="line-numbers" aria-hidden="true" style="counter-reset:line-number 0;"><div class="line-number"></div><div class="line-number"></div><div class="line-number"></div><div class="line-number"></div></div></div><h3 id="debug-getregistry" tabindex="-1"><a class="header-anchor" href="#debug-getregistry"><span>debug.getregistry()</span></a></h3><p>返回注册表。</p><div class="language-lua line-numbers-mode" data-highlighter="prismjs" data-ext="lua"><pre><code><span class="line"><span class="token function">print</span><span class="token punctuation">(</span>debug<span class="token punctuation">.</span><span class="token function">getregistry</span><span class="token punctuation">(</span><span class="token punctuation">)</span><span class="token punctuation">)</span></span>
<span class="line"></span></code></pre><div class="line-numbers" aria-hidden="true" style="counter-reset:line-number 0;"><div class="line-number"></div></div></div><h3 id="debug-getupvalue-f-i" tabindex="-1"><a class="header-anchor" href="#debug-getupvalue-f-i"><span>debug.getupvalue(f [, i])</span></a></h3><p>返回函数的上值。</p><div class="language-lua line-numbers-mode" data-highlighter="prismjs" data-ext="lua"><pre><code><span class="line"><span class="token function">print</span><span class="token punctuation">(</span>debug<span class="token punctuation">.</span><span class="token function">getupvalue</span><span class="token punctuation">(</span><span class="token number">1</span><span class="token punctuation">)</span><span class="token punctuation">)</span></span>
<span class="line"></span></code></pre><div class="line-numbers" aria-hidden="true" style="counter-reset:line-number 0;"><div class="line-number"></div></div></div><h3 id="debug-setfenv-object-table" tabindex="-1"><a class="header-anchor" href="#debug-setfenv-object-table"><span>debug.setfenv(object, table)</span></a></h3><p>设置对象的环境。</p><div class="language-lua line-numbers-mode" data-highlighter="prismjs" data-ext="lua"><pre><code><span class="line">debug<span class="token punctuation">.</span><span class="token function">setfenv</span><span class="token punctuation">(</span><span class="token keyword">function</span><span class="token punctuation">(</span><span class="token punctuation">)</span> <span class="token keyword">return</span> x <span class="token keyword">end</span><span class="token punctuation">,</span> <span class="token punctuation">{</span><span class="token punctuation">}</span><span class="token punctuation">)</span></span>
<span class="line"></span></code></pre><div class="line-numbers" aria-hidden="true" style="counter-reset:line-number 0;"><div class="line-number"></div></div></div><h3 id="debug-sethook-hook-mask-count" tabindex="-1"><a class="header-anchor" href="#debug-sethook-hook-mask-count"><span>debug.sethook(hook, mask [, count])</span></a></h3><p>设置钩子函数。</p><div class="language-lua line-numbers-mode" data-highlighter="prismjs" data-ext="lua"><pre><code><span class="line">debug<span class="token punctuation">.</span><span class="token function">sethook</span><span class="token punctuation">(</span><span class="token keyword">function</span><span class="token punctuation">(</span><span class="token punctuation">)</span> <span class="token function">print</span><span class="token punctuation">(</span><span class="token string">&quot;Hook called&quot;</span><span class="token punctuation">)</span> <span class="token keyword">end</span><span class="token punctuation">,</span> <span class="token string">&quot;c&quot;</span><span class="token punctuation">)</span></span>
<span class="line"></span></code></pre><div class="line-numbers" aria-hidden="true" style="counter-reset:line-number 0;"><div class="line-number"></div></div></div><h3 id="debug-setlocal-thread-f-level-value" tabindex="-1"><a class="header-anchor" href="#debug-setlocal-thread-f-level-value"><span>debug.setlocal([thread [, f,] level, value)</span></a></h3><p>设置函数的局部变量。</p><div class="language-lua line-numbers-mode" data-highlighter="prismjs" data-ext="lua"><pre><code><span class="line">debug<span class="token punctuation">.</span><span class="token function">setlocal</span><span class="token punctuation">(</span><span class="token number">1</span><span class="token punctuation">,</span> <span class="token number">1</span><span class="token punctuation">,</span> <span class="token string">&quot;value&quot;</span><span class="token punctuation">)</span></span>
<span class="line"></span></code></pre><div class="line-numbers" aria-hidden="true" style="counter-reset:line-number 0;"><div class="line-number"></div></div></div><h3 id="debug-setmetatable-object-table" tabindex="-1"><a class="header-anchor" href="#debug-setmetatable-object-table"><span>debug.setmetatable(object, table)</span></a></h3><p>设置对象的元表。</p><div class="language-lua line-numbers-mode" data-highlighter="prismjs" data-ext="lua"><pre><code><span class="line">debug<span class="token punctuation">.</span><span class="token function">setmetatable</span><span class="token punctuation">(</span>t<span class="token punctuation">,</span> mt<span class="token punctuation">)</span></span>
<span class="line"></span></code></pre><div class="line-numbers" aria-hidden="true" style="counter-reset:line-number 0;"><div class="line-number"></div></div></div><h3 id="debug-setupvalue-f-i-value" tabindex="-1"><a class="header-anchor" href="#debug-setupvalue-f-i-value"><span>debug.setupvalue(f [, i,] value)</span></a></h3><p>设置函数的上值。</p><div class="language-lua line-numbers-mode" data-highlighter="prismjs" data-ext="lua"><pre><code><span class="line">debug<span class="token punctuation">.</span><span class="token function">setupvalue</span><span class="token punctuation">(</span><span class="token number">1</span><span class="token punctuation">,</span> <span class="token number">1</span><span class="token punctuation">,</span> <span class="token string">&quot;newvalue&quot;</span><span class="token punctuation">)</span></span>
<span class="line"></span></code></pre><div class="line-numbers" aria-hidden="true" style="counter-reset:line-number 0;"><div class="line-number"></div></div></div><h3 id="debug-traceback-thread-message-level" tabindex="-1"><a class="header-anchor" href="#debug-traceback-thread-message-level"><span>debug.traceback([thread [, message [, level]])</span></a></h3><p>返回调用栈的跟踪信息。</p><div class="language-lua line-numbers-mode" data-highlighter="prismjs" data-ext="lua"><pre><code><span class="line"><span class="token function">print</span><span class="token punctuation">(</span>debug<span class="token punctuation">.</span><span class="token function">traceback</span><span class="token punctuation">(</span><span class="token punctuation">)</span><span class="token punctuation">)</span></span>
<span class="line"></span></code></pre><div class="line-numbers" aria-hidden="true" style="counter-reset:line-number 0;"><div class="line-number"></div></div></div><hr><h2 id="位运算库-bit" tabindex="-1"><a class="header-anchor" href="#位运算库-bit"><span>位运算库 (bit)</span></a></h2><h3 id="bit-band-x1-x2" tabindex="-1"><a class="header-anchor" href="#bit-band-x1-x2"><span>bit.band(x1, x2 [, ...])</span></a></h3><p>按位与操作。</p><div class="language-lua line-numbers-mode" data-highlighter="prismjs" data-ext="lua"><pre><code><span class="line"><span class="token function">print</span><span class="token punctuation">(</span>bit<span class="token punctuation">.</span><span class="token function">band</span><span class="token punctuation">(</span><span class="token number">0x0F</span><span class="token punctuation">,</span> <span class="token number">0x0F</span><span class="token punctuation">)</span><span class="token punctuation">)</span> <span class="token comment">-- 0x0F</span></span>
<span class="line"></span></code></pre><div class="line-numbers" aria-hidden="true" style="counter-reset:line-number 0;"><div class="line-number"></div></div></div><h3 id="bit-bnot-x" tabindex="-1"><a class="header-anchor" href="#bit-bnot-x"><span>bit.bnot(x)</span></a></h3><p>按位非操作。</p><div class="language-lua line-numbers-mode" data-highlighter="prismjs" data-ext="lua"><pre><code><span class="line"><span class="token function">print</span><span class="token punctuation">(</span>bit<span class="token punctuation">.</span><span class="token function">bnot</span><span class="token punctuation">(</span><span class="token number">0x0F</span><span class="token punctuation">)</span><span class="token punctuation">)</span> <span class="token comment">-- 0xFFFFFFF0</span></span>
<span class="line"></span></code></pre><div class="line-numbers" aria-hidden="true" style="counter-reset:line-number 0;"><div class="line-number"></div></div></div><h3 id="bit-bor-x1-x2" tabindex="-1"><a class="header-anchor" href="#bit-bor-x1-x2"><span>bit.bor(x1, x2 [, ...])</span></a></h3><p>按位或操作。</p><div class="language-lua line-numbers-mode" data-highlighter="prismjs" data-ext="lua"><pre><code><span class="line"><span class="token function">print</span><span class="token punctuation">(</span>bit<span class="token punctuation">.</span><span class="token function">bor</span><span class="token punctuation">(</span><span class="token number">0x0F</span><span class="token punctuation">,</span> <span class="token number">0x0F</span><span class="token punctuation">)</span><span class="token punctuation">)</span> <span class="token comment">-- 0x0F</span></span>
<span class="line"></span></code></pre><div class="line-numbers" aria-hidden="true" style="counter-reset:line-number 0;"><div class="line-number"></div></div></div><h3 id="bit-bxor-x1-x2" tabindex="-1"><a class="header-anchor" href="#bit-bxor-x1-x2"><span>bit.bxor(x1, x2 [, ...])</span></a></h3><p>按位异或操作。</p><div class="language-lua line-numbers-mode" data-highlighter="prismjs" data-ext="lua"><pre><code><span class="line"><span class="token function">print</span><span class="token punctuation">(</span>bit<span class="token punctuation">.</span><span class="token function">bxor</span><span class="token punctuation">(</span><span class="token number">0x0F</span><span class="token punctuation">,</span> <span class="token number">0x0F</span><span class="token punctuation">)</span><span class="token punctuation">)</span> <span class="token comment">-- 0x00</span></span>
<span class="line"></span></code></pre><div class="line-numbers" aria-hidden="true" style="counter-reset:line-number 0;"><div class="line-number"></div></div></div><h3 id="bit-lshift-x-disp" tabindex="-1"><a class="header-anchor" href="#bit-lshift-x-disp"><span>bit.lshift(x, disp)</span></a></h3><p>按位左移。</p><div class="language-lua line-numbers-mode" data-highlighter="prismjs" data-ext="lua"><pre><code><span class="line"><span class="token function">print</span><span class="token punctuation">(</span>bit<span class="token punctuation">.</span><span class="token function">lshift</span><span class="token punctuation">(</span><span class="token number">1</span><span class="token punctuation">,</span> <span class="token number">2</span><span class="token punctuation">)</span><span class="token punctuation">)</span> <span class="token comment">-- 4</span></span>
<span class="line"></span></code></pre><div class="line-numbers" aria-hidden="true" style="counter-reset:line-number 0;"><div class="line-number"></div></div></div><h3 id="bit-rshift-x-disp" tabindex="-1"><a class="header-anchor" href="#bit-rshift-x-disp"><span>bit.rshift(x, disp)</span></a></h3><p>按位右移。</p><div class="language-lua line-numbers-mode" data-highlighter="prismjs" data-ext="lua"><pre><code><span class="line"><span class="token function">print</span><span class="token punctuation">(</span>bit<span class="token punctuation">.</span><span class="token function">rshift</span><span class="token punctuation">(</span><span class="token number">4</span><span class="token punctuation">,</span> <span class="token number">2</span><span class="token punctuation">)</span><span class="token punctuation">)</span> <span class="token comment">-- 1</span></span>
<span class="line"></span></code></pre><div class="line-numbers" aria-hidden="true" style="counter-reset:line-number 0;"><div class="line-number"></div></div></div><h3 id="bit-arshift-x-disp" tabindex="-1"><a class="header-anchor" href="#bit-arshift-x-disp"><span>bit.arshift(x, disp)</span></a></h3><p>按位算术右移。</p><div class="language-lua line-numbers-mode" data-highlighter="prismjs" data-ext="lua"><pre><code><span class="line"><span class="token function">print</span><span class="token punctuation">(</span>bit<span class="token punctuation">.</span><span class="token function">arshift</span><span class="token punctuation">(</span><span class="token number">4</span><span class="token punctuation">,</span> <span class="token number">2</span><span class="token punctuation">)</span><span class="token punctuation">)</span> <span class="token comment">-- 1</span></span>
<span class="line"></span></code></pre><div class="line-numbers" aria-hidden="true" style="counter-reset:line-number 0;"><div class="line-number"></div></div></div><h3 id="bit-rol-x-disp" tabindex="-1"><a class="header-anchor" href="#bit-rol-x-disp"><span>bit.rol(x, disp)</span></a></h3><p>循环左移。</p><div class="language-lua line-numbers-mode" data-highlighter="prismjs" data-ext="lua"><pre><code><span class="line"><span class="token function">print</span><span class="token punctuation">(</span>bit<span class="token punctuation">.</span><span class="token function">rol</span><span class="token punctuation">(</span><span class="token number">0x0F</span><span class="token punctuation">,</span> <span class="token number">4</span><span class="token punctuation">)</span><span class="token punctuation">)</span> <span class="token comment">-- 0xF0</span></span>
<span class="line"></span></code></pre><div class="line-numbers" aria-hidden="true" style="counter-reset:line-number 0;"><div class="line-number"></div></div></div><h3 id="bit-ror-x-disp" tabindex="-1"><a class="header-anchor" href="#bit-ror-x-disp"><span>bit.ror(x, disp)</span></a></h3><p>循环右移。</p><div class="language-lua line-numbers-mode" data-highlighter="prismjs" data-ext="lua"><pre><code><span class="line"><span class="token function">print</span><span class="token punctuation">(</span>bit<span class="token punctuation">.</span><span class="token function">ror</span><span class="token punctuation">(</span><span class="token number">0x0F</span><span class="token punctuation">,</span> <span class="token number">4</span><span class="token punctuation">)</span><span class="token punctuation">)</span> <span class="token comment">-- 0x0F</span></span>
<span class="line"></span></code></pre><div class="line-numbers" aria-hidden="true" style="counter-reset:line-number 0;"><div class="line-number"></div></div></div><h3 id="bit-tobit-x" tabindex="-1"><a class="header-anchor" href="#bit-tobit-x"><span>bit.tobit(x)</span></a></h3><p>转换为位字符串。</p><div class="language-lua line-numbers-mode" data-highlighter="prismjs" data-ext="lua"><pre><code><span class="line"><span class="token function">print</span><span class="token punctuation">(</span>bit<span class="token punctuation">.</span><span class="token function">tobit</span><span class="token punctuation">(</span><span class="token number">0x0F</span><span class="token punctuation">)</span><span class="token punctuation">)</span> <span class="token comment">-- 00001111</span></span>
<span class="line"></span></code></pre><div class="line-numbers" aria-hidden="true" style="counter-reset:line-number 0;"><div class="line-number"></div></div></div><hr><h2 id="编码库-enc" tabindex="-1"><a class="header-anchor" href="#编码库-enc"><span>编码库 (enc)</span></a></h2><h3 id="enc-base64encode-input" tabindex="-1"><a class="header-anchor" href="#enc-base64encode-input"><span>enc.base64encode(input)</span></a></h3><p>将字符串编码为 Base64。</p><div class="language-lua line-numbers-mode" data-highlighter="prismjs" data-ext="lua"><pre><code><span class="line"><span class="token keyword">local</span> encoded <span class="token operator">=</span> enc<span class="token punctuation">.</span><span class="token function">base64encode</span><span class="token punctuation">(</span><span class="token string">&quot;Hello World&quot;</span><span class="token punctuation">)</span></span>
<span class="line"><span class="token function">print</span><span class="token punctuation">(</span>encoded<span class="token punctuation">)</span></span>
<span class="line"></span></code></pre><div class="line-numbers" aria-hidden="true" style="counter-reset:line-number 0;"><div class="line-number"></div><div class="line-number"></div></div></div><h3 id="enc-base64decode-input" tabindex="-1"><a class="header-anchor" href="#enc-base64decode-input"><span>enc.base64decode(input)</span></a></h3><p>将 Base64 字符串解码。</p><div class="language-lua line-numbers-mode" data-highlighter="prismjs" data-ext="lua"><pre><code><span class="line"><span class="token keyword">local</span> decoded <span class="token operator">=</span> enc<span class="token punctuation">.</span><span class="token function">base64decode</span><span class="token punctuation">(</span><span class="token string">&quot;SGVsbG8gV29ybGxcmVvcmxvYg==&quot;</span><span class="token punctuation">)</span></span>
<span class="line"><span class="token function">print</span><span class="token punctuation">(</span>decoded<span class="token punctuation">)</span></span>
<span class="line"></span></code></pre><div class="line-numbers" aria-hidden="true" style="counter-reset:line-number 0;"><div class="line-number"></div><div class="line-number"></div></div></div><hr><h2 id="包库-package" tabindex="-1"><a class="header-anchor" href="#包库-package"><span>包库 (package)</span></a></h2><h3 id="package-loaded" tabindex="-1"><a class="header-anchor" href="#package-loaded"><span>package.loaded</span></a></h3><p>已加载的包表。</p><div class="language-lua line-numbers-mode" data-highlighter="prismjs" data-ext="lua"><pre><code><span class="line"><span class="token function">print</span><span class="token punctuation">(</span>package<span class="token punctuation">.</span>loaded<span class="token punctuation">)</span></span>
<span class="line"></span></code></pre><div class="line-numbers" aria-hidden="true" style="counter-reset:line-number 0;"><div class="line-number"></div></div></div><h3 id="package-loaders" tabindex="-1"><a class="header-anchor" href="#package-loaders"><span>package.loaders</span></a></h3><p>包加载器表。</p><div class="language-lua line-numbers-mode" data-highlighter="prismjs" data-ext="lua"><pre><code><span class="line"><span class="token function">print</span><span class="token punctuation">(</span>package<span class="token punctuation">.</span>loaders<span class="token punctuation">)</span></span>
<span class="line"></span></code></pre><div class="line-numbers" aria-hidden="true" style="counter-reset:line-number 0;"><div class="line-number"></div></div></div><h3 id="package-loadlib-libname-initfunc" tabindex="-1"><a class="header-anchor" href="#package-loadlib-libname-initfunc"><span>package.loadlib(libname [, initfunc])</span></a></h3><p>加载 C 库。</p><div class="language-lua line-numbers-mode" data-highlighter="prismjs" data-ext="lua"><pre><code><span class="line">package<span class="token punctuation">.</span><span class="token function">loadlib</span><span class="token punctuation">(</span><span class="token string">&quot;mylib&quot;</span><span class="token punctuation">)</span></span>
<span class="line"></span></code></pre><div class="line-numbers" aria-hidden="true" style="counter-reset:line-number 0;"><div class="line-number"></div></div></div><h3 id="package-path" tabindex="-1"><a class="header-anchor" href="#package-path"><span>package.path</span></a></h3><p>包搜索路径。</p><div class="language-lua line-numbers-mode" data-highlighter="prismjs" data-ext="lua"><pre><code><span class="line"><span class="token function">print</span><span class="token punctuation">(</span>package<span class="token punctuation">.</span>path<span class="token punctuation">)</span></span>
<span class="line"></span></code></pre><div class="line-numbers" aria-hidden="true" style="counter-reset:line-number 0;"><div class="line-number"></div></div></div><h3 id="package-searchpath-name-path-sep-rep" tabindex="-1"><a class="header-anchor" href="#package-searchpath-name-path-sep-rep"><span>package.searchpath(name [, path [, sep [, rep]])</span></a></h3><p>搜索包路径。</p><div class="language-lua line-numbers-mode" data-highlighter="prismjs" data-ext="lua"><pre><code><span class="line"><span class="token function">print</span><span class="token punctuation">(</span>package<span class="token punctuation">.</span><span class="token function">searchpath</span><span class="token punctuation">(</span><span class="token string">&quot;mylib&quot;</span><span class="token punctuation">)</span><span class="token punctuation">)</span></span>
<span class="line"></span></code></pre><div class="line-numbers" aria-hidden="true" style="counter-reset:line-number 0;"><div class="line-number"></div></div></div><h3 id="package-seeall-name" tabindex="-1"><a class="header-anchor" href="#package-seeall-name"><span>package.seeall([name])</span></a></h3><p>列出所有已加载的包。</p><div class="language-lua line-numbers-mode" data-highlighter="prismjs" data-ext="lua"><pre><code><span class="line"><span class="token function">print</span><span class="token punctuation">(</span>package<span class="token punctuation">.</span><span class="token function">seeall</span><span class="token punctuation">(</span><span class="token punctuation">)</span><span class="token punctuation">)</span></span>
<span class="line"></span></code></pre><div class="line-numbers" aria-hidden="true" style="counter-reset:line-number 0;"><div class="line-number"></div></div></div><hr><h2 id="使用示例" tabindex="-1"><a class="header-anchor" href="#使用示例"><span>使用示例</span></a></h2><h3 id="交互式-lua-shell" tabindex="-1"><a class="header-anchor" href="#交互式-lua-shell"><span>交互式 Lua Shell</span></a></h3><p>使用 <code>lua --shell</code> 进入交互模式:</p><div class="language-text line-numbers-mode" data-highlighter="prismjs" data-ext="text"><pre><code><span class="line">lua --shell</span>
<span class="line">====================================</span>
<span class="line"> Lua Interactive Shell</span>
<span class="line">====================================</span>
<span class="line">Type &#39;exit&#39; or &#39;quit&#39; to exit</span>
<span class="line"></span>
<span class="line">lua&gt; print(&quot;Hello, World!&quot;)</span>
<span class="line">Hello, World!</span>
<span class="line"></span>
<span class="line">lua&gt; os.gethostname()</span>
<span class="line">myserver</span>
<span class="line"></span>
<span class="line">lua&gt; os.sha256(&quot;Hello&quot;)</span>
<span class="line">a591a6d40bf420404a011733cfb7b1d12e</span>
<span class="line"></span>
<span class="line">lua&gt; exit</span>
<span class="line">Exiting Lua shell...</span>
<span class="line"></span></code></pre><div class="line-numbers" aria-hidden="true" style="counter-reset:line-number 0;"><div class="line-number"></div><div class="line-number"></div><div class="line-number"></div><div class="line-number"></div><div class="line-number"></div><div class="line-number"></div><div class="line-number"></div><div class="line-number"></div><div class="line-number"></div><div class="line-number"></div><div class="line-number"></div><div class="line-number"></div><div class="line-number"></div><div class="line-number"></div><div class="line-number"></div><div class="line-number"></div><div class="line-number"></div></div></div><h3 id="执行-lua-脚本文件" tabindex="-1"><a class="header-anchor" href="#执行-lua-脚本文件"><span>执行 Lua 脚本文件</span></a></h3><div class="language-lua line-numbers-mode" data-highlighter="prismjs" data-ext="lua"><pre><code><span class="line">lua script<span class="token punctuation">.</span>lua</span>
<span class="line"></span></code></pre><div class="line-numbers" aria-hidden="true" style="counter-reset:line-number 0;"><div class="line-number"></div></div></div><h3 id="系统信息查询" tabindex="-1"><a class="header-anchor" href="#系统信息查询"><span>系统信息查询</span></a></h3><div class="language-lua line-numbers-mode" data-highlighter="prismjs" data-ext="lua"><pre><code><span class="line"><span class="token function">print</span><span class="token punctuation">(</span><span class="token string">&quot;Hostname:&quot;</span><span class="token punctuation">,</span> os<span class="token punctuation">.</span><span class="token function">gethostname</span><span class="token punctuation">(</span><span class="token punctuation">)</span><span class="token punctuation">)</span></span>
<span class="line"><span class="token function">print</span><span class="token punctuation">(</span><span class="token string">&quot;Username:&quot;</span><span class="token punctuation">,</span> os<span class="token punctuation">.</span><span class="token function">getusername</span><span class="token punctuation">(</span><span class="token punctuation">)</span><span class="token punctuation">)</span></span>
<span class="line"><span class="token function">print</span><span class="token punctuation">(</span><span class="token string">&quot;Is Admin:&quot;</span><span class="token punctuation">,</span> os<span class="token punctuation">.</span><span class="token function">isadmin</span><span class="token punctuation">(</span><span class="token punctuation">)</span><span class="token punctuation">)</span></span>
<span class="line"><span class="token function">print</span><span class="token punctuation">(</span><span class="token string">&quot;SHA256:&quot;</span><span class="token punctuation">,</span> os<span class="token punctuation">.</span><span class="token function">sha256</span><span class="token punctuation">(</span><span class="token string">&quot;Hello&quot;</span><span class="token punctuation">)</span><span class="token punctuation">)</span></span>
<span class="line"></span></code></pre><div class="line-numbers" aria-hidden="true" style="counter-reset:line-number 0;"><div class="line-number"></div><div class="line-number"></div><div class="line-number"></div><div class="line-number"></div></div></div><h3 id="环境变量操作" tabindex="-1"><a class="header-anchor" href="#环境变量操作"><span>环境变量操作</span></a></h3><div class="language-lua line-numbers-mode" data-highlighter="prismjs" data-ext="lua"><pre><code><span class="line">os<span class="token punctuation">.</span><span class="token function">setenv</span><span class="token punctuation">(</span><span class="token string">&quot;MYVAR&quot;</span><span class="token punctuation">,</span> <span class="token string">&quot;value&quot;</span><span class="token punctuation">)</span></span>
<span class="line"><span class="token function">print</span><span class="token punctuation">(</span>os<span class="token punctuation">.</span><span class="token function">getenv</span><span class="token punctuation">(</span><span class="token string">&quot;MYVAR&quot;</span><span class="token punctuation">)</span><span class="token punctuation">)</span></span>
<span class="line">os<span class="token punctuation">.</span><span class="token function">delenv</span><span class="token punctuation">(</span><span class="token string">&quot;MYVAR&quot;</span><span class="token punctuation">)</span></span>
<span class="line"></span></code></pre><div class="line-numbers" aria-hidden="true" style="counter-reset:line-number 0;"><div class="line-number"></div><div class="line-number"></div><div class="line-number"></div></div></div><h3 id="加密和编码" tabindex="-1"><a class="header-anchor" href="#加密和编码"><span>加密和编码</span></a></h3><div class="language-lua line-numbers-mode" data-highlighter="prismjs" data-ext="lua"><pre><code><span class="line"><span class="token keyword">local</span> hash <span class="token operator">=</span> os<span class="token punctuation">.</span><span class="token function">sha256</span><span class="token punctuation">(</span><span class="token string">&quot;password&quot;</span><span class="token punctuation">)</span></span>
<span class="line"><span class="token keyword">local</span> encoded <span class="token operator">=</span> os<span class="token punctuation">.</span><span class="token function">base64encrypt</span><span class="token punctuation">(</span><span class="token string">&quot;secret&quot;</span><span class="token punctuation">)</span></span>
<span class="line"><span class="token keyword">local</span> decoded <span class="token operator">=</span> os<span class="token punctuation">.</span><span class="token function">base64decrypt</span><span class="token punctuation">(</span>encoded<span class="token punctuation">)</span></span>
<span class="line"><span class="token function">print</span><span class="token punctuation">(</span><span class="token string">&quot;Hash:&quot;</span><span class="token punctuation">,</span> hash<span class="token punctuation">)</span></span>
<span class="line"><span class="token function">print</span><span class="token punctuation">(</span><span class="token string">&quot;Encoded:&quot;</span><span class="token punctuation">,</span> encoded<span class="token punctuation">)</span></span>
<span class="line"><span class="token function">print</span><span class="token punctuation">(</span><span class="token string">&quot;Decoded:&quot;</span><span class="token punctuation">,</span> decoded<span class="token punctuation">)</span></span>
<span class="line"></span></code></pre><div class="line-numbers" aria-hidden="true" style="counter-reset:line-number 0;"><div class="line-number"></div><div class="line-number"></div><div class="line-number"></div><div class="line-number"></div><div class="line-number"></div><div class="line-number"></div></div></div><h2 id="注意事项" tabindex="-1"><a class="header-anchor" href="#注意事项"><span>注意事项</span></a></h2><ol><li><strong>交互模式</strong>:使用 <code>lua --shell</code> 进入交互式 Lua Shell</li><li><strong>错误处理</strong>:所有 Lua 执行错误都会被捕获并显示</li><li><strong>系统函数</strong><code>os</code> 库包含 CMLeonOS 特定的系统函数</li><li><strong>加密支持</strong>:支持 SHA256 和 Base64 编码/解码</li><li><strong>标准 Lua</strong>:完全兼容 Lua 5.1 标准</li></ol><h2 id="版本信息" tabindex="-1"><a class="header-anchor" href="#版本信息"><span>版本信息</span></a></h2><ul><li><strong>Lua 版本</strong>5.2</li><li><strong>CMLeonOS 版本</strong>:最新</li></ul></div><!--[--><!--]--></div><footer class="vp-page-meta"><!----><div class="vp-meta-item git-info"><!----><!----></div></footer><!----><!--[--><!--]--></main><!--]--></div><!--[--><!----><!--]--><!--]--></div>
<script type="module" src="/assets/app-DPqZ-Olm.js" defer></script>
</body>
</html>

View File

@@ -0,0 +1,31 @@
---
home: true
title: 主页
# heroImage: https://vuejs.press/images/hero.png
actions:
- text: 开始配置
link: /get-started.html
type: primary
- text: Lua 文档
link: /lua.html
type: secondary
# - text: Introduction
# link: https://vuejs.press/guide/introduction.html
# type: secondary
features:
- title: 安全用户系统
details: 用户系统是直接绑定在内核下的,通过 SHA-256 密码哈希算法对用户密码进行加密存储,确保用户密码的安全性。
- title: Lua 脚本支持
details: CMLeonOS支持 Lua 脚本,用户可以通过 Lua 脚本实现自定义功能。
- title: 网络
details: CMLeonOS支持 TCP/IP 协议栈,用户可以通过网络连接到其他设备。
- title: FTP 服务器
details: CMLeonOS支持 FTP 服务器,用户可以通过 FTP 协议上传下载文件。
- title: 内置编辑器
details: CMLeonOS支持内置编辑器用户可以直接在CMLeonOS中编辑文件。
- title: 硬盘存储
details: CMLeonOS支持硬盘存储用户可以将文件持久存储在硬盘中。
# footer: MIT Licensed | Copyright © 2018-present VuePress Community

View File

@@ -0,0 +1,17 @@
# 配置教程
## 准备工作
首先,准备一台实体机/虚拟机,确保这台机器等于或大于以下配置:
- 处理器:一核以上
- 内存512MB以上
- 硬盘512MB以上
- 一个键盘
- 一个蜂鸣器或音频输出设备
- 建议装上AMD驱动的网卡Intel驱动的网卡似乎无法运行
## 配置硬盘
使用PE或其它工具格式化硬盘注意只分一个区文件系统选择FAT32
## 安装CMLeonOS
将CMLeonOS的ISO文件挂载到虚拟机或实体机上启动后按照提示进行 First time setup。
在 First time setup 中系统会让你配置用户名、密码、主机名配置完后会进行重启重启之后正常登陆系统然后就可以开始使用CMLeonOS了。

View File

@@ -1,22 +1,6 @@
# CMLeonOS Lua API 文档
本文档记录了 CMLeonOS 中 UniLua 支持的所有函数和库。
## 目录
- [基础库](#基础库)
- [数学库](#数学库)
- [字符串库](#字符串库)
- [操作系统库](#操作系统库)
- [输入输出库](#输入输出库)
- [协程库](#协程库)
- [表库](#表库)
- [调试库](#调试库)
- [位运算库](#位运算库)
- [编码库](#编码库)
- [包库](#包库)
---
本文档记录了 CMLeonOS 中 Lua 支持的所有函数和库。
## 基础库 (base)
@@ -47,6 +31,14 @@ collectgarbage("count")
dofile("script.lua")
```
### input([prompt])
从控制台读取一行输入。
```lua
local name = input("Enter your name: ")
print("Hello, " .. name)
```
### error(message [, level])
抛出错误并终止当前受保护的调用。
@@ -1201,8 +1193,6 @@ print("Encoded:", encoded)
print("Decoded:", decoded)
```
---
## 注意事项
1. **交互模式**:使用 `lua --shell` 进入交互式 Lua Shell
@@ -1211,18 +1201,7 @@ print("Decoded:", decoded)
4. **加密支持**:支持 SHA256 和 Base64 编码/解码
5. **标准 Lua**:完全兼容 Lua 5.1 标准
---
## 版本信息
- **Lua 版本**5.2
- **UniLua 版本**:自定义实现
- **CMLeonOS 版本**:最新
---
## 更新日志
- 2026-02-04: 初始文档创建
- 添加了所有 UniLua 支持的库和函数
- 包含 CMLeonOS 特定的系统扩展函数

View File

@@ -0,0 +1,20 @@
{
"name": "cmleonos",
"description": "The CMLeon Operating System Project Official Website",
"version": "0.0.1",
"license": "MIT",
"type": "module",
"scripts": {
"docs:build": "vuepress build docs",
"docs:clean-dev": "vuepress dev docs --clean-cache",
"docs:dev": "vuepress dev docs -p 8081",
"docs:update-package": "pnpm dlx vp-update"
},
"devDependencies": {
"@vuepress/bundler-vite": "2.0.0-rc.20",
"@vuepress/theme-default": "2.0.0-rc.88",
"sass-embedded": "^1.86.0",
"vue": "^3.5.13",
"vuepress": "2.0.0-rc.20"
}
}

3083
docs/cmleonos/pnpm-lock.yaml generated Normal file

File diff suppressed because it is too large Load Diff