letで作成した変数をかきかえようとするとnilになる
タイトルがわかりづらくてごめんなさい
どういうことかというと。。。
let(:str) { 'str' }
before do
str = str+'ing'
end
#=> strがnilになる。
このような現象が起きる。
問題解決としては単純に違う変数名を指定すればいいだけのこと。だけど、まさかnilになるとはおもってもいなかったので、共有する。
なぜこのような問題となったのか?
2.3.0から導入されているfrozen_string_literalをrspecないに導入した際に
can't modify frozen string
このようなエラーが起きた。
だったら、変数に代入すればいいじゃんということで、同じ変数名で代入したら、違うエラーが発生したのだ。binding.pryなどで調べると上記の問題を発見!!!
まーrubyとかなら変数の中身が書きかわるという感じでそのまま無意識でこのようなことをしてしまうと思う。
みんなの役に立てるといいなー。。。
このような記事をみつけることができなかたので、自分のためにももしかしたらほかの人のためにもなるのではないかと思い今回投稿することにした。
なにか間違っていることや、違うアプローチがあればコメントお願いします。
追記
コメントでもいただいたように自分が勘違いをしていた。
そもそもletは変数ではなくmemoized helper methodを定義しているらしい。
コメントいただいた方、ありがとうございます。
新たに勉強になりました。