如何在OpsCode Chef中调用Lambda实现运行时求值?
Chef中Lambda调用获取实际值的正确方法
你当前的代码仅定义了Lambda(Proc)对象,但并未执行它,因此输出的是Lambda对象本身而非计算后的MD5哈希值。
要获取Lambda内部代码的执行结果,需要调用Lambda对象,常用的几种调用语法如下:
- 使用
call方法:md5.call - 使用方括号语法:
md5[] - 使用圆括号(Ruby 1.9及以上版本支持):
md5.()
修改你的代码示例,调用Lambda即可得到实际的MD5值:
md5 = lambda { Digest::MD5.file("#{some_file}").hexdigest } pp "md5: #{md5.call}"
如果需要直接在表达式中执行Lambda,也可以写成:
pp "md5: #{lambda { Digest::MD5.file("#{some_file}").hexdigest }.call}"
这种方式正好满足你在运行时求值的需求,Lambda内部的代码会等到调用时才执行,确保some_file变量使用的是运行时的最新值。
内容的提问来源于stack exchange,提问作者Ronald Top
相关产品推荐
相关产品推荐

