1
0
Fork 0
mirror of https://github.com/ruby/ruby.git synced 2022-11-09 12:17:21 -05:00

[DOC] Document Marshal#load parameter freeze: (#5332)

This commit is contained in:
Victor Shepelev 2021-12-24 10:55:09 +02:00 committed by GitHub
parent 35d779c57b
commit 1706d1a7f3
No known key found for this signature in database
GPG key ID: 4AEE18F83AFDEB23
Notes: git 2021-12-24 17:55:29 +09:00
Merged-By: byroot <jean.boussier@gmail.com>

View file

@ -1,7 +1,7 @@
module Marshal module Marshal
# call-seq: # call-seq:
# load( source [, proc] ) -> obj # load(source, proc = nil, freeze: false) -> obj
# restore( source [, proc] ) -> obj # restore(source, proc = nil, freeze: false) -> obj
# #
# Returns the result of converting the serialized data in source into a # Returns the result of converting the serialized data in source into a
# Ruby object (possibly with associated subordinate objects). source # Ruby object (possibly with associated subordinate objects). source
@ -11,6 +11,25 @@ module Marshal
# #
# Never pass untrusted data (including user supplied input) to this method. # Never pass untrusted data (including user supplied input) to this method.
# Please see the overview for further details. # Please see the overview for further details.
#
# If the <tt>freeze: true</tt> argument is passed, deserialized object would
# be deeply frozen. Note that it may lead to more efficient memory usage due to
# frozen strings deduplication:
#
# serialized = Marshal.dump(['value1', 'value2', 'value1', 'value2'])
#
# deserialized = Marshal.load(serialized)
# deserialized.map(&:frozen?)
# # => [false, false, false, false]
# deserialized.map(&:object_id)
# # => [1023900, 1023920, 1023940, 1023960] -- 4 different objects
#
# deserialized = Marshal.load(serialized, freeze: true)
# deserialized.map(&:frozen?)
# # => [true, true, true, true]
# deserialized.map(&:object_id)
# # => [1039360, 1039380, 1039360, 1039380] -- only 2 different objects, object_ids repeating
#
def self.load(source, proc = nil, freeze: false) def self.load(source, proc = nil, freeze: false)
Primitive.marshal_load(source, proc, freeze) Primitive.marshal_load(source, proc, freeze)
end end