MoonScript 代表月亮消灭你
2019-07-25 11:02:23
收藏数:0
阅读数:789
评论数:0
MoonScript 代表月亮消灭你
简介
用一个类比,说清它是什么:
MoonScript:Lua=CoffeeScript:JavaScript
MoonScript 可以直接运行(生成Lua中间代码),也可以生成lua,还可以作为包加载到lua中使用require "moonscript"
。
例子
- 定义一个模块
module.moon
#!/usr/bin/env moon
export module
module = {}
M = module
M.length = (x, y) -> math.sqrt x*x + y*y
M.print_result = (x, y) ->
print "Length is ", M.length x, y
-- return M (不必要)
- 在
main.moon
中调用模块(中的函数)
#!/usr/bin/env moon
moudle = require "module"
import print_result from module
print_result 4, 5 -- prints the result
运行 运行
moon /path/to/main.moon
结果是Length is 6.4031242374328编译,生成lua文件 运行
moonc /path/to/main.moon
运行moonc /path/to/module.moon
再运行lua Programming/MoonScript/main.lua
结果是Length is 6.4031242374328
生成的Lua代码往往看上去有点杂乱,但是效率很高。
资源
个人习作
定义模块
#!/usr/bin/env moon
freqdist = {}
M = freqdist
M.count =(array)->
t = {} -- 记录统计次数信息
for i, a in ipairs array
if t[a] -- t 中存在 a
t[a] = t[a] + 1 -- 计数 + 1
else -- t 中不存在 a
t[a] = 1 -- 开始计数,a放入表中
return t
M.ordered_count=(array)->
set = {}
count = {}
for i, a in ipairs array
if set[a]
for k, v in ipairs count
word, times = v[1], v[2]
if word == a
k0=k
v0= {a, times+1}
break
k=k0-1
while k>0
v = count[k]
if v[2]>times
table.remove count, k0
table.insert count, k+1, v0
break
k -=1
if k==0 then
table.remove count, k0
table.insert count, 1, v0
else
set[a] = true
count[#count+1]={a, 1}
return count
M.freq=(array)->
-- 计算频率
t = count array
N = #array
for i, a in pairs t
t[i] = a / N
return t
M.ngram=(array, n)->
if n==nil
n=2
t={}
N = #array
for i=1, N-n
s ={}
for j=1, n
s[j]=array[j+i-1]
t[i]=s
return t
return M
注意,没有用export,因此return 是必要的。
调用
#!/usr/bin/env moon
freq = require "freq"
t = freq.count {4, 5,3,1,2,3,4}
for k, a in pairs t
print k, a
运行moon Programming/MoonScript/hello.moon
1 1 2 1 3 2 4 2 5 1
评论区的留言会收到邮件通知哦~
推荐文章
- [实习] [开源软件] Casbin 开源软件 GSoC 远程预选+实习生 for Lua
- Openresty 压测总结
- Openresty 中的空值:nil,ngx.null,cjson.null
- macbook pro A1707 15 寸笔记本拆机指南
- Lua 的垃圾回收机制
- 介绍几个和 Lua 有关的工具
- 什么时候使用 access_by_lua,什么时候使用 content_by_lua
- Windows下 怎么编译安装 luadist lua版本是5.53
- srlua编译的exe如何反编译
- lua tcp socket queued connect timed out
- luarocks 牛刀小试
- EFK 日志服务-地理位置 geo_point 配置
- 解决 docker scratch 镜像的部署问题
- gitlab runner docker in docker 踩坑记
- MoonScript 代表月亮消灭你
- 将 Lua 代码编译为 JavaScript
- Lua游戏设计范例3
- 函数美学3---Curry化
- luaClass
- 求助!请教一个关于luaxml模块的使用问题