我有一个关于Chef和Lambda方法在运行时而不是编译时计算变量的问题。查看下面的片段:
md5 = lambda { Digest::MD5.file("#{some_file}").hexdigest } pp "md5: #{md5}"
字符串这导致:
md5: #<Proc:0x000000000c153b08
型但是我确实想拥有变量本身。.call lambda并获得实际变量的确切语法是什么?我为此抓狂了好几天。任何帮助高度赞赏!
0lvr5msh1#
call proc或lambda的几个选项:
call
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)}"
型
dzhpxtsq2#
要计算lambda代码,可以call它:
md5 = lambda { Digest::MD5.file("#{some_file}").hexdigest } pp "md5: #{md5.call}"
字符串lambda的call方法,或者Ruby中的Proc对象,将在创建Proc时计算给定的块,并返回该块的返回值。注意,结果不会缓存,每次调用call都会再次计算该块。
2条答案
按热度按时间0lvr5msh1#
call
proc或lambda的几个选项:字符串
上面的每一个也可以接受参数。这可以用来例如 * 传递 * 文件名:(
->
是一个lambda proc文字)型
dzhpxtsq2#
要计算lambda代码,可以
call
它:字符串
lambda的
call
方法,或者Ruby中的Proc对象,将在创建Proc时计算给定的块,并返回该块的返回值。注意,结果不会缓存,每次调用call
都会再次计算该块。