提问人:Ronald Top 提问时间:11/17/2023 最后编辑:Holger JustRonald Top 更新时间:11/17/2023 访问量:65
如何在 OpsCode Chef 中调用 lamda 以仅进行运行时评估?
how to .call a lamda in OpsCode Chef to be able to do a run time evaluation only?
问:
我有一个关于 Chef 和 Lambda 方法的问题,该方法用于在运行时而不是在编译时评估变量。检查下面的截图:
md5 = lambda { Digest::MD5.file("#{some_file}").hexdigest }
pp "md5: #{md5}"
这导致:
md5: #<Proc:0x000000000c153b08
但我确实希望拥有变量本身。.调用 lambda 并获取实际变量的确切语法是什么?我拔了好几天的头发。
任何帮助,非常感谢!
答:
3赞
Stefan
11/17/2023
#1
调用
proc 或 lambda 的几个选项:
md5 = lambda { "foo" }
"md5: #{md5.call}" #=> "md5: foo"
"md5: #{md5.()}" #=> "md5: foo"
"md5: #{md5[]}" #=> "md5: foo"
"md5: #{md5.yield}" #=> "md5: foo"
以上每个也可以接受参数。例如,这可用于传递文件名:( 是一个 lambda proc 文本->
)
md5 = ->(filename) { Digest::MD5.file(filename).hexdigest }
"md5: #{md5.call(somefile)}"
"md5: #{md5.(somefile)}"
"md5: #{md5[somefile]}"
"md5: #{md5.yield(somefile)}"
评论
1赞
Alex
11/18/2023
也像那样md5 === somefile
1赞
Holger Just
11/17/2023
#2
要评估 lambda 代码,您可以:call
md5 = lambda { Digest::MD5.file("#{some_file}").hexdigest }
pp "md5: #{md5.call}"
lambda 的方法,或者通常,Ruby 中的 Proc 对象将评估创建 Proc 时给出的块并返回块的返回值。请注意,结果不会被缓存,每次调用都会再次评估该块。call
call
评论
0赞
Ronald Top
11/22/2023
谢谢!但是,另一个答案更完整,因此值得称赞,但两者都非常有帮助,谢谢!
评论
"#{some_file}"
some_file