Ruby'yi öğreniyorum ve değişkenlerle Object#freeze
yöntemini kullanırken ilginç bir davranış buldum.Ruby'de donma değişkenleri çalışmıyor
Bir değişkeni dondurduktan sonra (Fixnum
veya Array
), hala değiştirebilirim! Bu garip, endişelendiğim sürece bu olmamalı ve TypeError
yükseltilmelidir.
test = 666
var = 90
#ok
var += 5
puts "var.frozen? #{var.frozen?}"
var.freeze
puts "var.frozen? #{var.frozen?}"
var = test
puts "var = #{var}"
aynı dizide içindir:
test = [666]
var = [90]
#ok
var += [5]
puts "var.frozen? #{var.frozen?}"
var.freeze
puts "var.frozen? #{var.frozen?}"
var = test
puts "var = #{var}"
Ama dondurma sonra diziye bir şey itmek çalıştığınızda beklendiği gibi, bu bir arror yükseltir: Burada
kod butest = [666]
var = [90]
#ok
var += [5]
puts "var.frozen? #{var.frozen?}"
var.freeze
puts "var.frozen? #{var.frozen?}"
var << test
puts "var = #{var}"
Birisi bana bu sorunu açıklayabilir mi? Garip görünüyor. Ben, Nesneleri değil değişkenleri dondurmak Windows XP ve üzeri Yakut 1.9.3-P429
meraklı:
Burada rasyonel okuyabilirsiniz: Bir nesnenin iç yapıları açığa zaman, ne yaptığını dikkat yoksa bu zor sizi ısırabilir - Neden "test" = "666": P – sircapsalot
Bu, donmanın yaptığı şey değil; Tam olarak amaçlandığı gibi çalışıyor. Değişmez değerler gibi değişmez değerleri donduramazsınız ve kesinlikle değişkenleri "donduramazsınız", böylece yeni değerlere ayarlanamazlar. Sadece nesneleri dondur. – meagar
@meagar: Değişkenleri dondurabilirsiniz. Sadece anlamsız çünkü zaten değiştirilemezler. Ama 5.freeze '' 5.Frozen? '' True' döndürdüğü anlamında çalışır. –