Skip to content

Instantly share code, notes, and snippets.

@toshia
Created April 5, 2013 16:10
Show Gist options
  • Star 0 You must be signed in to star a gist
  • Fork 0 You must be signed in to fork a gist
  • Save toshia/5320510 to your computer and use it in GitHub Desktop.
Save toshia/5320510 to your computer and use it in GitHub Desktop.
UserConfig[]の戻り値は、freezeされてるから、この戻り値自体に破壊的な変更はできない。
UserConfig[:test] << :value # => なんかエラー
freezeされているオブジェクトは、mikutterではmeltで変更可能になるが、その時内部的にはシャローコピーされてしまうので、UserConfig自体には変更できない
UserConfig[:test].melt << :value # => [:value]
# result
UserConfig[:test] # => []
そこで、meltの戻り値をもう一度代入すれば、変更が反映できる。
test = UserConfig[:test].melt
test << :value # => [:value]
UserConfig[:test] = test
# result
UserConfig[:test] # => [:value]
ところで、Rubyでは、演算子に=をつけたら、a = a operator b の意味になるので、以下のような書き方は動作する(演算子+は破壊的変更でないので、meltを使う必要はない)。
UserConfig[:text] = "foo"
UserConfig[:text] += "bar"
UserConfig[:text] # => "foobar"
したがって、上記の例は以下のように書き換えられる。
# UserConfig[:test] = UserConfig[:test] + [:value] と同じ意味
UserConfig[:test] += [:value]
# result
UserConfig[:test] # => [:value]
Sign up for free to join this conversation on GitHub. Already have an account? Sign in to comment