[前][次][番号順一覧][スレッド一覧]

ruby-changes:70529

From: Victor <ko1@a...>
Date: Fri, 24 Dec 2021 17:55:20 +0900 (JST)
Subject: [ruby-changes:70529] 1706d1a7f3 (master): [DOC] Document Marshal#load parameter freeze: (#5332)

https://git.ruby-lang.org/ruby.git/commit/?id=1706d1a7f3

From 1706d1a7f3abd3ed1259607a05f0de1ee85e23c2 Mon Sep 17 00:00:00 2001
From: Victor Shepelev <zverok.offline@g...>
Date: Fri, 24 Dec 2021 10:55:09 +0200
Subject: [DOC] Document Marshal#load parameter freeze: (#5332)

---
 marshal.rb | 23 +++++++++++++++++++++--
 1 file changed, 21 insertions(+), 2 deletions(-)

diff --git a/marshal.rb b/marshal.rb
index b8b5ce9e82e..9ff74dd8b24 100644
--- a/marshal.rb
+++ b/marshal.rb
@@ -1,7 +1,7 @@ https://github.com/ruby/ruby/blob/trunk/marshal.rb#L1
 module Marshal
   # call-seq:
-  #     load( source [, proc] ) -> obj
-  #     restore( source [, proc] ) -> obj
+  #    load(source, proc = nil, freeze: false) -> obj
+  #    restore(source, proc = nil, freeze: false) -> obj
   #
   # Returns the result of converting the serialized data in source into a
   # Ruby object (possibly with associated subordinate objects). source
@@ -11,6 +11,25 @@ module Marshal https://github.com/ruby/ruby/blob/trunk/marshal.rb#L11
   #
   # Never pass untrusted data (including user supplied input) to this method.
   # 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)
     Primitive.marshal_load(source, proc, freeze)
   end
-- 
cgit v1.2.1


--
ML: ruby-changes@q...
Info: http://www.atdot.net/~ko1/quickml/

[前][次][番号順一覧][スレッド一覧]