【发布时间】:2015-04-11 04:48:37
【问题描述】:
这是我想保存 Time.now.strftime('%m%d%Y_%H%M') 输出的 ruby 命令,我想我可以在我的食谱中添加这样的东西'
TODAY={ ::Time.now.strftime('%m%d%Y_%H%M') }
但这似乎不起作用
==> default: [2015-04-10T17:53:44+00:00] ERROR: /tmp/vagrant-chef/eb36617d9c55f20fcee6cd316a379482/cookbooks/test-cookbook/recipes/install_app.rb:12: syntax error, unexpected '}', expecting tASSOC
==> default: TODAY={ (Time.now.strftime('%m%d%Y_%H%M')) }
==> default: ^
==> default: [2015-04-10T17:53:44+00:00] FATAL: Chef::Exceptions::ChildConvergeError: Chef run process exited unsuccessfully (exit code 1)
最后我想把它变成一个属性,这样我就可以从多个食谱中访问它
default['neustar-npac-deployment']['node_ohai_time'] = TODAY={ ::Time.now.strftime('%m%d%Y_%H%M') }
谢谢!
【问题讨论】:
-
为什么你有
{}这不是一个块,而是实际上是哈希字面量语法。如果您希望这是一个惰性块,请使用->{}或lambda {},它们都会产生lambda或Proc.new {},它们将产生真正的Proc。所以像TODAY = -> {Time.now.strftime('%m%d%Y_%H%M')}。然后要获得结果,它将是TODAY.call或者您可以直接将其设置为TODAY = Time.now.strftime('%m%d%Y_%H%M')但似乎您希望它进行惰性评估,因此 lambda 可能最适合。 -
我不介意它是否是懒惰的评估,我只是按照一个例子而不了解
{ }的用途。我会尝试直接使用它,看看它是否有效。谢谢 -
我的观点是
TODAY = Time.now.strftime('%m%d%Y_%H%M')意味着TODAY一旦被评估就不会改变,因为它是一个固定常数,而TODAY = -> { Time.now.strftime('%m%d%Y_%H%M') }意味着每次你使用TODAY.call时它都会评估lambda 和立即返回响应电流。这有意义吗? -
哦,我现在明白了,这很整洁!在这种情况下,我只需要它保持不变,但我会记住它以供将来参考。
-
你应该发表你的评论作为答案:)
标签: ruby variables attributes chef-infra