1
0
mirror of https://github.com/jbranchaud/til synced 2026-01-03 15:18:01 +00:00

Add Create Named Structs With Struct.new as a ruby til

This commit is contained in:
jbranchaud
2019-04-17 15:55:04 -05:00
parent 8209281e4d
commit 39efb39bbb
2 changed files with 40 additions and 1 deletions

View File

@@ -0,0 +1,38 @@
# Create Named Structs With Struct.new
I often see `Struct` used to create some one-off anonymous data structure
like so:
```ruby
> person = Struct.new(:name, :age)
=> #<Class:0x007fc6c89112e8>
> person.new("Alice", 33)
=> #<struct name="Alice", age=33>
```
This will often get the job done, but on its own the resulting data
structure doesn't tell us as much as it could.
We can say more with a _named_ struct:
```ruby
Struct.new("Person", :name, :age)
=> Struct::Person
> Struct::Person.new("Bob", 24)
=> #<struct Struct::Person name="Bob", age=24>
```
When the first argument is a string that can be converted to a constant,
then we'll get a named struct that is subclassed under `Struct`.
We can also assign the struct initialization to a constant to do a similar
thing:
```ruby
> Person = Struct.new(:name, :age)
=> Person
> Person.new("Jerry", 45)
=> #<struct Person name="Jerry", age=45>
```
[source](https://ruby-doc.org/core-2.4.2/Struct.html#method-c-new)