【发布时间】:2017-08-25 19:26:29
【问题描述】:
以下是我对 GNUmake 中 lambda 表达式的一般模拟的看法:
space := $(strip) $(strip)
comma := ,
# convert a space-separated list in $1 into a comma-separated list:
list2param = $(subst $(space),$(comma),$(strip $1))
# param $1 = quoted GUNmake expression
# param $2 = parameters to the expression as space-separated list
lambda = $(eval _lambda=$1)$(eval _lambda:=$$(call _lambda,$(call list2param,$2)))$(_lambda)
例子:
$(info $(call lambda,$$1 .. $$2 .. $$3,foo bar baz))
输出:
foo .. bar .. baz
但这并不令人满意,因为我必须在幕后使用变量“_lambda”,并且该机制并不像 lambda,因为评估没有与定义分开。是否有一种干净、直接的方法来实现 lambda?还是已经实现了一些我盲目的程序编程眼睛没有注意到的机制?
【问题讨论】:
-
你的高级问题是什么?
-
@MaximEgorushkin 例如在表格排序中,我需要一个排序键,我决定将其作为代码传递:
$(info Sorting table: $(call sort_tbl,$(call select_from_MEMORY,1 2,where_name_FBL),3,$$(call lpad,$$(call lstrip,$$1,0x),8,0)))。$$(call lpad ...将采用第 1 列的元素(十六进制数字),去掉 0x 前缀并用 0 填充它以创建可排序的键。
标签: lambda functional-programming gnu-make