Railsでカラムをbefore_createで入れ替えるという処理をしたくて、
date2, date1 = date1, date2
と書いたはいいが値の入れ替えは行われなかった。それどころかnilになってしまった。
self.date2, self.date1 = self.date1, self.date2
と、self
を付けると入れ替えができた。以下のプログラムでも同様の現象が起きた。
class Hoge
attr_accessor :a, :b
def func
a, b = b, a
p a, b #=> nil nil
p self.a, self.b #=> 1 2
end
end
h = Hoge.new
h.a, h.b = 1, 2
puts "#{h.a}, #{h.b}" #=> 1, 2
h.func
puts "#{h.a}, #{h.b}" #=> 1, 2
a, b = b, a
の左辺値がローカル変数になってるからだと思うのだけれども、その直後のa, b
がnilだった。バグ?