LoginSignup
0
0

More than 5 years have passed since last update.

Chefのattributeでdefault[]への代入元にnode[]を使っても自己参照で発散しない? => しない

Last updated at Posted at 2018-06-19

default[]などは代入元にnode[]が使えるが、自己参照で発散したりしないか気になったので、少し試して見た。

recipes/default.rb

node.default['foo'] = 'bar'
log node['foo']                 #=>         * log[bar] action write

node.default['foo'] = 'baz'
log node['foo']                 #=>         * log[baz] action write

# node[]の値はその時点で判断される。
# ならば自己参照による発散もない。


node.default['foo'] = node['foo']
log node['foo']                 #=>         * log[baz] action write

node.default['foo'] = node['foo'] * 2
log node['foo']                 #=>         * log[bazbaz] action write

# 当然発散しない


node.force_default['foo'] = 'qux'
log node['foo']                 #=>         * log[qux] action write

# 高優先順位で設定


node.default['foo'] = 'quux'
log node['foo']                 #=>         * log[qux] action write

# 低優先順位の設定は表に出てこれない

log node.default['foo']         #=>         * log[quux] action write
log node.force_default['foo']   #=>         * log[qux] action write

# 低優先順位の値も内部的には保持し続けている
# node[]は保持している値の中で、その時点でもっとも優先順位の高い値を返すだけ

発散しない。
node[]は都度収束される。

0
0
0

Register as a new user and use Qiita more conveniently

  1. You get articles that match your needs
  2. You can efficiently read back useful information
  3. You can use dark theme
What you can do with signing up
0
0