我正在考虑为我们在烹饪书中使用的一些常用功能创建LWRP的选项。有没有办法传递节点属性并在LWRP中更新它?
第二个选项是创建库函数。如果调用者将一个节点属性传递给库函数,那么如何在函数中设置一个新值?
非常感谢任何指向这些的指示。
答案 0 :(得分:1)
真的需要更多细节才能肯定地回答。
然后,您将需要使用库函数而不是资源/提供程序。您不必“传递”任何内容,因为node
对象已在两个库和LWRP中可用。您可以像对node['path']['to']['attribute']
一样使用相同的方式访问属性,并将其设置为与node.default['path']['to']['attribute']
(或.normal
,.override
等配方相同的属性。如果你想要真正的幻想,并使方法变量,你可以做这样的事情。
*未经测试的代码(获取属性的路径,并将该属性设置为块的返回值,将属性的当前值传递到块中)
def check_and_set(*attr_path, &check)
current, parent = node
leaf = nil
current = attr_path.reduce do |current, branch|
current[branch]
parent = current
leaf = branch
value = check.yield(current)
parent[leaf] = value
end
如果您不只是阅读设置,那么您可能需要LWRP。上述所有内容仍然适用。 node
对象仍然可用,您可以像在配方中一样阅读和写入。