在Lisp中有没有办法使用命名参数格式化字符串?
也许像关联列表那样的东西
(format t "All for ~(who)a and ~(who)a for all!~%" ((who . "one")))
Run Code Online (Sandbox Code Playgroud)
为了打印"All for one and one for all".
类似于这个python问题,或者这个scala,甚至是c ++,但是在Lisp中.
如果此功能不在语言中,那么是否有人可以使用任何可以完成相同操作的酷函数或宏?
我一直在尝试使用 AWS CDK 以编程方式构建 CloudFormation 堆栈模板,但在使用CfnParameters 参数化模板时遇到问题。
当我在 json/yaml 中手动编写模板时,我ParameterGroups使用嵌套Parameters列表进行声明,并定义各个参数,包括类型、描述、AllowedPattern 等。然后在资源的定义中,我可以通过Ref值引用这些参数,例如
"CidrBlock": {
"Ref": "MyVpcCidr"
}
Run Code Online (Sandbox Code Playgroud)
我的问题是如何通过 CDK 使用此功能、定义参数并稍后在模板中引用它?
我尝试使用以下方法software.amazon.awscdk.core.CfnParameter,但收到错误
final CfnParameter myVpcCidrParameter =
CfnParameter.Builder.create(this, "MyVpcCidr")
.type("String")
.description("The CIDR block for the VPC")
.build();
final Vpc vpc =
Vpc.Builder.create(this, "vpc")
.cidr(myVpcCidrParameter.getValueAsString()) // <-- error on this line
.enableDnsSupport(true)
.enableDnsHostnames(true)
.build();
...
Run Code Online (Sandbox Code Playgroud)
错误指出
JsiiException:“cidr”属性必须是具体的 CIDR 字符串,已获得令牌
这似乎很合理,因为myVpcCidrParameter.getValueAsString()返回"${Token[TOKEN.10]}".
但是,我没有看到任何其他方法CfnParameter或Vpc.Builder允许我使用参数引用来指定属性值作为对我的参数的引用。
使用 CDK 构建包含参数和使用这些参数定义的资源的模板的正确方法是什么?