skynet学习笔记之配置加载 load_config

static const char * load_config = "\
	local result = {}\n\
\n\
    --(toby@2022-03-09): 将配置中的 $XXX 转化为环境变量XXX的值 \n\
	local function getenv(name) return assert(os.getenv(name), [[os.getenv() failed: ]] .. name) end\n\
\n\
    --(toby@2022-03-09): 获取文件分隔符 linux上是 "/" \n\
	local sep = package.config:sub(1,1)\n\
\n\
    --(toby@2022-03-09): 设置当前路径 "./" \n\
	local current_path = [[.]]..sep\n\
\n\
    --(toby@2022-03-09): 引入其他文件配置 \n\
    --  例如 include "config.path" filename = "config.path" \n\
	local function include(filename)\n\
		local last_path = current_path\n\
\n\
        --(toby@2022-03-09): 解析filename 模式为 (path/)(name) \n\
		local path, name = filename:match([[(.*]]..sep..[[)(.*)$]])\n\
		if path then\n\
			if path:sub(1,1) == sep then	-- root\n\
                --(toby@2022-03-09): 路径首字符为 "/" 表示绝对路径 \n\
				current_path = path\n\
			else\n\
                --(toby@2022-03-09): 相对路径 \n\
				current_path = current_path .. path\n\
			end\n\
		else\n\
            --(toby@2022-03-09): 就在当前目录,没有匹配出path \n\
			name = filename\n\
		end\n\
\n\
        --(toby@2022-03-09): 打开配置文件 \n\
		local f = assert(io.open(current_path .. name))\n\
\n\
        --(toby@2022-03-09): 读取所有行到code \n\
		local code = assert(f:read [[*a]])\n\
\n\
        --(toby@2022-03-09): 将配置中的 $XXX 转化为环境变量XXX的值 \n\
		code = string.gsub(code, [[%$([%w_%d]+)]], getenv)\n\
		f:close()\n\
\n\
        --(toby@2022-03-09): load (chunk [, chunkname [, mode [, env]]]) \n\
        --  _ENV = result \n\
        --  加载配置内容到 result \n\
		assert(load(code,[[@]]..filename,[[t]],result))()\n\
		current_path = last_path\n\
	end\n\
\n\
	setmetatable(result, { __index = { include = include } })\n\
	local config_name = ...\n\
	include(config_name)\n\
	setmetatable(result, nil)\n\
	return result\n\
";
  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 打赏
    打赏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包

打赏作者

tobybo

你的鼓励将是我创作的最大动力

¥1 ¥2 ¥4 ¥6 ¥10 ¥20
扫码支付:¥1
获取中
扫码支付

您的余额不足,请更换扫码支付或充值

打赏作者

实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值