Skip to content

Instantly share code, notes, and snippets.

@yakitorii
Last active September 19, 2017 13:46
Show Gist options
  • Star 0 You must be signed in to star a gist
  • Fork 0 You must be signed in to fork a gist
  • Save yakitorii/89b627e4ebabc74551e4cf2db672c291 to your computer and use it in GitHub Desktop.
Save yakitorii/89b627e4ebabc74551e4cf2db672c291 to your computer and use it in GitHub Desktop.

RubyKaigi 三日目: PatternMatch in Ruby(パターンマッチをやりたい話をします)

注意:「パターンマッチができたよ」という話ではない

このエントリは、RubyKaigi前夜祭 に顔を出した発表者の鳥井が、尊敬するpattern_match gem の作者の辻本さんに「期待してますよー」と言われて心底震え上がり、期待値コントロールを痛切に感じて書き上げたものです。 なので言い訳が多いのはそれが主旨だからです。

やったこと

  • 「おれのかんがえたさいきょうのパターンマッチ」を考えた
  • ざっくりパーサーとゆるふわマッチャを Rubyで 実装して Ruby インタプリタ(parse.y と compile.c)にそっと差し込んで動かした(もちろん本実装ではない)

トークの目的

  • パターンマッチのあるRubyが動くところを実際にみてもらって、Rubyにパターンマッチを入れる議論が盛り上がると嬉しい
  • Ruby しか書けない人間がゆるふわにRubyの文法を拡張する抜け道を知ってもらって、いろんな人のおもしろRubyを見てみたい

おれのかんがえたさいきょうのパターンマッチ(基本)

  • パターンは%p(…) で書く
  • マッチ用オペレーターは =~===

Ex: =~ を使う

if %p([x, :y, 5]) =~ [1, :y, 5]
  p “The first element is #{x}”
else
  p “Not Match!”
end
#=> “First Element is 1”

Ex: === を使う

user = { name: 'yuki', from: 'Fukuoka' }
case user
when %p({name: name, from: 'Hiroshima'})
  p "#{name} is a local people. Thank you!"
when %p({name: name, from: _})
  p "#{name} is a visitor. welcome!"
end

話すこと

  • パターンマッチってどんなものか
  • おれのかんがえたさいきょうのパターンマッチ
  • ゆるふわRuby拡張のやりかた
  • とりあえず一緒にパターンマッチについて考えないかのお誘い

以上です!

Sign up for free to join this conversation on GitHub. Already have an account? Sign in to comment