点赞
用户234175
用户234175

通常你是正确的,但是Lua 5.2引入了一种优化,即匿名函数可能会被缓存,如果满足某些条件。具体而言,如果它引用的值在构造之间不会改变,则第一个创建的那个匿名函数实例将被重用。 在repl.it,Lua 5.1中运行您的示例,可能会得到以下一种可能的输出:

function: 0xb81f30  function: 0xb81f00  function: 0xb82ca0

但在melpon.org/wandbox下运行Lua 5.2+时,则会显示:

function: 0x14f0650 function: 0x14f0650 function: 0x14efb40

在您的示例中,createRect为每个调用创建并返回不同的rect表,但由于此优化rect.translate字段被分配了与Lua值相同的匿名函数。 另请参见

2017-01-22 04:48:28