Created
April 5, 2013 16:10
-
-
Save toshia/5320510 to your computer and use it in GitHub Desktop.
This file contains bidirectional Unicode text that may be interpreted or compiled differently than what appears below. To review, open the file in an editor that reveals hidden Unicode characters.
Learn more about bidirectional Unicode characters
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