在javascript中,可以通过同时定义和调用函数来快速创建闭包:
function() {
local something = 1;
return function () {
// something
}
}()
是否可以在lua
中做同样的事情?
答案 0 :(得分:3)
是的,您可以在Lua中创建立即调用的函数表达式(IIFE)。 Lua要求在函数表达式fastqs:
- class: File
path: /path/to/fastq_1_R1.fq.gz
- class: File
path: /path/to/fastq_2_R1.fq.gz
fastq2s:
- class: File
path: /path/to/fastq_1_R2.fq.gz
- class: File
path: /path/to/fastq_2_R2.fq.gz
sample_names: [foo, bar]
上加上括号。删除括号paired_end_fastqs:
- fastq:
class: File
path: /path/to/fastq_1_R1.fq.gz
fastq2:
class: File
path: /path/to/fastq_1_R2.fq.gz
sample_name: foo
- fastq:
class: File
path: /path/to/fastq_2_R1.fq.gz
fastq2:
class: File
path: /path/to/fastq_2_R2.fq.gz
sample_name: bar
,您会收到语法错误。并且无法命名该功能:(function () return 10 end)()
。命名函数语法是用于将函数分配给变量function () return 10 end()
的语法糖,并且赋值不是Lua中的表达式,因此不能将它们称为函数。
JavaScript要求在函数表达式周围或整个函数周围加上括号,再加上函数调用括号组合:(function f() return 10 end)()
或f = function() return 10 end
。括号可确保将(function () { return 10; })()
解释为函数表达式而不是函数声明。在Lua中,第二种构造的等效(function () { return 10; }())
无效。在JavaScript中,但不能在Lua中,您可以在函数表达式中提供一个名称,如果出现错误,该名称将显示在堆栈跟踪中:function () {}
或(function () return 10 end())
。