ruby 如何.在OpsCode Chef中调用lamda,以便只进行运行时评估?

4urapxun  于 2023-11-18  发布在  Ruby
关注(0)|答案(2)|浏览(91)

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

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

字符串
这导致:

md5: #<Proc:0x000000000c153b08


但是我确实想拥有变量本身。.call lambda并获得实际变量的确切语法是什么?我为此抓狂了好几天。
任何帮助高度赞赏!

0lvr5msh

0lvr5msh1#

call 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)}"

dzhpxtsq

dzhpxtsq2#

要计算lambda代码,可以call它:

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

字符串
lambda的call方法,或者Ruby中的Proc对象,将在创建Proc时计算给定的块,并返回该块的返回值。注意,结果不会缓存,每次调用call都会再次计算该块。

相关问题