[ruby-core:89369] [Ruby trunk Feature#15222] Add a way to distinguish between Struct classes with and without keyword initializer

From: publicshady@...
Date: 2018-10-11 13:01:49 UTC
List: ruby-core #89369
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:[email protected]?subject=unsubscribe>
<http://lists.ruby-lang.org/cgi-bin/mailman/options/ruby-core>

In This Thread

Prev Next