Project

General

Profile

Feature #13272

Keyword argument to instantiate a subclass of Struct

Added by tagomoris (Satoshi TAGOMORI) over 1 year ago. Updated 7 months ago.

Status:
Closed
Priority:
Normal
Assignee:
-
Target version:
-
[ruby-core:79885]

Description

When we define a subclass of Struct, it take arguments of values of fields when instantiated:

ServiceAccount = Struct(:account_name, :full_name, :nickname, :name_invited_by, :twitter_account_name)
a = ServiceAccount.new("tagomoris", "satoshi tagomori", "satoshi", "satoru", "@tagomoris")

It's simple and enough easy to use when the code to instantiate it is near from definition.
But sometimes the code using ServiceAccount may be far from definition, and hard to read/understand what does an element represent.

I want to use keyword arguments to instantiate struct objects in such case. it's far easier to understand rather than arguments without keywords:

a = ServiceAccount.new(
  account_name: "tagomoris",
  full_name: "satoshi tagomori",
  nickname: "satoshi",
  name_invited_by: "satoru",
  twitter_account_name: "@tagomoris",
)

Related issues

Is duplicate of Ruby trunk - Feature #11925: Struct construction with kwargsClosed

History

#1 Updated by nobu (Nobuyoshi Nakada) over 1 year ago

  • Is duplicate of Feature #11925: Struct construction with kwargs added

#2 [ruby-core:79895] Updated by shevegen (Robert A. Heiler) over 1 year ago

I agree it is easier to read.

In the other thread, Shyouhei Urabe said that nobody at the developer
meeting was against it (I assume this also includes matz).

So I suppose that this may be implemented eventually.

#3 Updated by k0kubun (Takashi Kokubun) 7 months ago

  • Status changed from Open to Closed

Applied in changeset trunk|r61137.


struct.c: add keyword_init option to Struct.new

to initialize struct with keyword arguments.

[Feature #11925] [close GH-1771]

Also available in: Atom PDF