From: takashikkbn@... Date: 2018-10-11T13:16:39+00:00 Subject: [ruby-core:89370] [Ruby trunk Feature#15222] Add a way to distinguish between Struct classes with and without keyword initializer Issue #15222 has been updated by k0kubun (Takashi Kokubun). This would be helpful for implementing custom deserializer of Struct. Note: If you need to support Ruby 2.5, you would need to do `object.class.inspect.end_with?('(keyword_init: true)')`. ---------------------------------------- Feature #15222: Add a way to distinguish between Struct classes with and without keyword initializer https://bugs.ruby-lang.org/issues/15222#change-74411 * Author: pluff (Pavel Shutsin) * Status: Open * Priority: Normal * Assignee: * Target version: ---------------------------------------- With Ruby 2.5.0 Struct subclasses can have different `initialize` arguments list based on `keyword_init` option. However, there is no way in Ruby to distinguish Structs with keyword arguments syntax and without. I propose a class method `keyword_init?` that will allow developers to understand if given structure has keyword based initializer or not. Example use case for serialization: ``` Foo = Struct.new(:foo, keyword_init: true) Bar = Struct.new(:bar) def dump_and_load_struct(object) serialized = object.to_h object.class.new(object.class.keyword_init? ? serialized : serialized.values) end dump_and_load_struct(Foo.new(foo: 1)) # # dump_and_load_struct(Bar.new(2)) # # ``` An issue that might be related: https://bugs.ruby-lang.org/issues/14314 -- https://bugs.ruby-lang.org/ Unsubscribe: