我对函数调用via .和via 之间的区别感到困惑:
> x = {foo = function(a,b) return a end, bar = function(a,b) return b end, }
> return x.foo(3,4)
3
> return x.bar(3,4)
4
> return x:foo(3,4)
table: 0x10a120
> return x:bar(3,4)
3
Run Code Online (Sandbox Code Playgroud)
什么是:做什么?
给定一个x,y点数组,如何按顺时针顺序(围绕它们的整体平均中心点)对该数组的点进行排序?我的目标是将点传递给线创建函数,以最终看起来相当"坚实"的东西,尽可能凸起,没有相交的线.
为了它的价值,我正在使用Lua,但任何伪代码都会受到赞赏.非常感谢您的帮助!
更新:作为参考,这是基于Ciamej优秀答案的Lua代码(忽略我的"app"前缀):
function appSortPointsClockwise(points)
local centerPoint = appGetCenterPointOfPoints(points)
app.pointsCenterPoint = centerPoint
table.sort(points, appGetIsLess)
return points
end
function appGetIsLess(a, b)
local center = app.pointsCenterPoint
if a.x >= 0 and b.x < 0 then return true
elseif a.x == 0 and b.x == 0 then return a.y > b.y
end
local det = (a.x - center.x) * (b.y - center.y) - (b.x - center.x) * (a.y - center.y)
if det < 0 then return true
elseif det > 0 then …Run Code Online (Sandbox Code Playgroud) 在过去的几个月里,我一直在与Lua打交道,我非常喜欢大部分的功能,但我仍然缺少其中的一些东西:
continue?我只是喜欢JavaScript.这是如此优雅(想象一下在背景中叹息的爱情狂热的声音).
所以,最近我通过löve2d框架玩了Lua (很好!) - 我认为Lua也很棒.他们看待它,这两种语言非常相似.
有明显的差异,比如
但哪些是更微妙的?JavaScript编码器是否会认为在Lua中工作的东西略有不同?是否有任何陷阱对于有经验的编程人员尝试另一种语言而言可能并不明显?
例如:在Lua中,数组和散列不是分开的(只有表格) - 在JavaScript中,它们是数字数组和散列对象.嗯,这是一个比较明显的差异.
但是在变量范围,不变性或类似的东西方面是否存在差异?
听起来像是"让我谷歌给你"的问题,但不知怎的,我找不到答案.Lua #运算符仅使用整数键计数条目,因此table.getn:
tbl = {}
tbl["test"] = 47
tbl[1] = 48
print(#tbl, table.getn(tbl)) -- prints "1 1"
count = 0
for _ in pairs(tbl) do count = count + 1 end
print(count) -- prints "2"
Run Code Online (Sandbox Code Playgroud)
如何在不计算所有条目的情况下获取所有条目的数量?
我不明白Lua这一部分的决定背后的理由.为什么索引从1开始?我读过(和其他人一样)这篇伟大的论文.在我看来,语言的一个奇怪的角落是非常愉快的学习和编程.不要误会我的意思,Lua很棒,但必须在某处做出解释.我发现的大部分内容(在网上)只是说索引从1开始.完全停止.
阅读其设计师对该主题的看法将是非常有趣的.
请注意,我在Lua中"非常"初学者,我希望我不会错过关于表格的明显内容.
确定表是否为空(即,当前既不包含数组样式值也不包含dict样式值)的最有效方法是什么?
目前,我正在使用next():
if not next(myTable) then
-- Table is empty
end
Run Code Online (Sandbox Code Playgroud)
有更有效的方法吗?
注意:#运算符在这里不够用,因为它只对表中的数组样式值进行操作 - 因此#{test=2}无法区分,#{}因为它们都返回0.还要注意检查表变量是否nil足够,因为我不是在寻找nil值,而是具有0个条目的表(即{}).
我在显示包含嵌套表(n-deep)的表的内容时遇到问题.我想通过print声明或快速而肮脏的东西将它转储到std out或控制台,但我无法弄清楚如何.我正在寻找打印NSDictionary使用gdb 时得到的粗略等效物.