Я сохраняю простые значения (базовые типы данных) в хеш, и я вызываю dup
на значение, прежде чем избегать воздействия на исходный объект (например, моментальный снимок). Я хочу не делать dup
в случае немедленного значения и просто хранить его как есть. Можно ли определить, является ли объект/значение немедленным?Рубин: проверка на немедленное значение?
т.е. (12, 13, 14 являются непосредственными)
[12] pry(#<Table2Spec::TestTable>)> 1.dup
TypeError: can't dup Fixnum
from (pry):12:in `dup'
[13] pry(#<Table2Spec::TestTable>)> :f.dup
TypeError: can't dup Symbol
from (pry):13:in `dup'
[14] pry(#<Table2Spec::TestTable>)> true.dup
TypeError: can't dup TrueClass
from (pry):14:in `dup'
[16] pry(#<Table2Spec::TestTable>)> 's'.dup
=> "s"
Согласно документации:
Immediate values are not passed by reference but are passed by value: nil, true, false, Fixnums, Symbols, and some Floats.
Ruby 2.4.0 позволяет обдувать немедленные объекты (хотя документы не были полностью обновлены). – matt