我有一个关于 Chef 和 Lambda 方法的问题,该方法是在运行时而不是编译时评估变量。检查下面的片段:
md5 = lambda { Digest::MD5.file("#{some_file}").hexdigest }
pp "md5: #{md5}"
这会导致:
md5: #<Proc:0x000000000c153b08
但我确实想要变量本身。调用 lambda 并获取实际变量的确切语法是什么?我这几天都在拔头发。
非常感谢任何帮助!
几个选项:
md5 = lambda { "foo" }
"md5: #{md5.call}" #=> "md5: foo"
"md5: #{md5.()}" #=> "md5: foo"
"md5: #{md5[]}" #=> "md5: foo"
要评估 lambda 代码,您可以
call
它:
md5 = lambda { Digest::MD5.file("#{some_file}").hexdigest }
pp "md5: #{md5.call}"
lambda 的
call
方法或者一般来说,Ruby 中的 Proc 对象将评估创建 Proc 时给出的块并返回该块的返回值。请注意,结果不会被缓存,每个 call
调用都会再次评估该块。