如何在 OpsCode Chef 中调用 lamda 才能仅进行运行时评估?

问题描述 投票:0回答:2

我有一个关于 Chef 和 Lambda 方法的问题,该方法是在运行时而不是编译时评估变量。检查下面的片段:

md5 = lambda { Digest::MD5.file("#{some_file}").hexdigest }
pp "md5: #{md5}"

这会导致:

md5: #<Proc:0x000000000c153b08

但我确实想要变量本身。调用 lambda 并获取实际变量的确切语法是什么?我这几天都在拔头发。

非常感谢任何帮助!

ruby variables lambda chef-infra
2个回答
1
投票

几个选项:

md5 = lambda { "foo" }

"md5: #{md5.call}" #=> "md5: foo"
"md5: #{md5.()}"   #=> "md5: foo"
"md5: #{md5[]}"    #=> "md5: foo"

0
投票

要评估 lambda 代码,您可以

call
它:

md5 = lambda { Digest::MD5.file("#{some_file}").hexdigest }
pp "md5: #{md5.call}"

lambda 的

call
方法或者一般来说,Ruby 中的 Proc 对象将评估创建 Proc 时给出的块并返回该块的返回值。请注意,结果不会被缓存,每个
call
调用都会再次评估该块。

© www.soinside.com 2019 - 2024. All rights reserved.