Issue #15222 has been reported by pluff (Pavel Shutsin).

----------------------------------------
Feature #15222: Add a way to distinguish between Struct classes with and without keyword initializer
https://bugs.ruby-lang.org/issues/15222

* 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)) # #<struct Foo foo=1>
dump_and_load_struct(Bar.new(2)) # #<struct Bar bar=1>
```

An issue that might be related: https://bugs.ruby-lang.org/issues/14314



-- 
https://bugs.ruby-lang.org/

Unsubscribe: <mailto:ruby-core-request / ruby-lang.org?subject=unsubscribe>
<http://lists.ruby-lang.org/cgi-bin/mailman/options/ruby-core>