1
0
mirror of https://github.com/jbranchaud/til synced 2026-01-03 23:28:02 +00:00

Add Pattern Matching Values From A Hash as a ruby til

This commit is contained in:
jbranchaud
2021-01-30 22:04:40 -06:00
parent f9ae92948b
commit 12388e8cc7
2 changed files with 34 additions and 1 deletions

View File

@@ -10,7 +10,7 @@ pairing with smart people at Hashrocket.
For a steady stream of TILs, [sign up for my newsletter](https://tinyletter.com/jbranchaud). For a steady stream of TILs, [sign up for my newsletter](https://tinyletter.com/jbranchaud).
_1030 TILs and counting..._ _1031 TILs and counting..._
--- ---
@@ -855,6 +855,7 @@ _1030 TILs and counting..._
- [Pass A Block To Count](ruby/pass-a-block-to-count.md) - [Pass A Block To Count](ruby/pass-a-block-to-count.md)
- [Passing Arbitrary Methods As Blocks](ruby/passing-arbitrary-methods-as-blocks.md) - [Passing Arbitrary Methods As Blocks](ruby/passing-arbitrary-methods-as-blocks.md)
- [Passing Arguments To A Rake Task](ruby/passing-arguments-to-a-rake-task.md) - [Passing Arguments To A Rake Task](ruby/passing-arguments-to-a-rake-task.md)
- [Pattern Match Values From A Hash](ruby/pattern-match-values-from-a-hash.md)
- [Percent Notation](ruby/percent-notation.md) - [Percent Notation](ruby/percent-notation.md)
- [Question Mark Operator](ruby/question-mark-operator.md) - [Question Mark Operator](ruby/question-mark-operator.md)
- [Rake Only Lists Tasks With Descriptions](ruby/rake-only-lists-tasks-with-descriptions.md) - [Rake Only Lists Tasks With Descriptions](ruby/rake-only-lists-tasks-with-descriptions.md)

View File

@@ -0,0 +1,32 @@
# Pattern Match Values From A Hash
As of Ruby 3.0.0, the _rightward assignment_ operator (`=>`) was introduced as
another syntax for assigning values to variables. With it comes an experimental
pattern matching capability. This pattern matching can be used with hashes to
extract keyed values into local variables.
Pattern matching with rightward assignment can be done by placing a hash on the
left-hand side of the `=>` operator and then placing a hash-like listing of
keys to be matched against.
```ruby
> some_hash = { name: "Josh", handle: "@jbrancha", age: :unknown }
=> {:name=>"Josh", :handle=>"@jbrancha", :age=>:unknown}
> some_hash => {name:, handle:}
(irb):3: warning: One-line pattern matching is experimental, and the behavior may change in future versions of Ruby!
=> nil
> name
=> "Josh"
> handle
=> "@jbrancha"
```
This example extracts `name` and `handle` as local variables assigned with the
values of the those keys from the hash.
Note that this feature is _experimental_.
Also note that referencing a key that doesn't exist in a pattern matching
statement will raise a `NoMatchingPatternError`.
[source](https://www.ruby-lang.org/en/news/2020/12/25/ruby-3-0-0-released/)