Rubyにおける構文追加の試み 〜ボクとRubyと俺々文法〜

Kenta USAMI
Kenta USAMIPHPer - pixiv Inc. at pixiv Inc.
Rubyにおける構文追加の試み
    〜ボクとRubyと俺々文法〜



             プログラミングコース
                    言語組
                 宇佐美 健太
やりたいこと

   Rubyに新しい文法を追加したい
       後置のcase文(修飾子)
       改行をハッシュの区切り記号に!
Rubyに後置case文を追加

   Rubyのcase文はCのswitchに相当
             C                   Ruby
    switch(var){
    switch                 case var
      case 1:                when 1   then
        puts(”case 1”);        puts   ”case 1”
        break;               when 2   then
      case 2:                  puts   ”case 2”
        puts(”case 2”);      else
        break;                 puts   ”default”
      default:
      default              end
        puts(”default”);
      }
Rubyに後置case文を追加

   修飾子による制御
    a=0,x=100,y=false
    puts ”#{a=a+1}” while a<10
    puts ”x=#{x}” if x==100
    puts ”y=#{y}” unless y
    z=(1/0) rescue puts ”zero div!”
   ここにcase文も追加したい!

    N=10, m=false
    puts ”Hello”   case n when (1..20)
    puts ”Welcome” case when m
Rubyに後置case文を追加
   後置case whenを追加したい!
       どうやるの?
      パーサを編集して、Rubyに新たな規則を追加!
   Rubyは構文解析にYaccを使用
       ”Yet Another Compiler-Compiler”
       字句解析されてきたコードを
   parse.y (yaccファイル) を編集
       既存の規則と衝突しないように追加
Rubyに後置case文を追加

var = 3
puts "Hello" case var when (1..5)

            NODE_CASE
                                  構文木

NODE_DVAR
   var            NODE_WHEN


     NODE_ARRAY           NODE_FCALL
        (1..5)             puts(“Hello”)
Rubyに後置case文を追加
   yacc文法規則
    primary:k_case expr_value opt_terms
            case_body
            k_end
            {
                   $$ = NEW_CASE($2, $4);
                                 $2 $4
            }

    primary: stmt modifier_case expr_value
               keyword_when args
         {
             $$=NEW_CASE($3,NEW_WHEN($5,$1,0));
                         $3          $5 $1
         }
Rubyに後置case文を追加

   新しい文法規則を追加した結果
    #追加した構文
    puts”ok” case gets() when 'x','y','z'

    #既存の構文
    g = gets
    puts”ok” if g=='x'||g=='y'||g=='z'

    case gets
    when 'x','y','z'
      puts ”ok”
    end
#既存の構文

t = true
case t when true then puts”ok” end
                           #=>”ok”
                           #干渉しない!
Rubyに後置case文を追加


#既存の構文
def say arg;p arg;end
say case option
            when :ruby then s.to_ruby
            when :marshal then ...
            else s.to_yaml
      end
#syntax error, unexpected 'n', expecting keyword_when
#なにそれ読めない! Rubyでおk
ハッシュの,を省略

   Rubyのハッシュ
    settings={
          ”userid” =>”myuser”   ,
          ”passwd” =>”PassWord” ,
          ”host” =>”127.0.0.1”
    }
    puts(settings[”userid”]) #=>”myuser”
    puts settings[”passwd”] #=>”PassWord”

    各行末に , を書く必要があって、ちょっとめんどい!
        だから区切りの , を省略したい!
ハッシュの , を省略

   つまりこう書きたい
    hash={
             ”key” => ”kanon”
             ”key2” => ”air”
             ”chao” => ”leaf”
    }
    key={
      1999=>"Kanon",2000=>"AIR"
      2004=>"CLANNAD",2007=>"Little Busters!"
    }
    いちいち行末に , を書かなくても良いので、
    見ためが非常にすっきりして書きやすい!
ハッシュの , を省略
   結果 => できました。
       ハッシュの区切り ( , ) を ( , 'n') にしただけ!
                              n
       メソッドの引数や配列の区切りと兼用だったので、ハッ
        シュだけを隔離。
       メソッドに渡す引数も改行で区切りできると便利なのだ
        けれど、今回のところは断念。
       Rubyはメソッド呼び出しの括弧は省略がデフォなので、
        これに対応しようとするとカオス!
Leaf = Hash[
  1997=>"ToHeart",1998=>"WHITE ALBUM"
  1999=>"Comic Party",2004=>"ToHeart2"
]   # {}に似てるけど、Hash#[]はメソッド呼びだし
      {}               []
今回の成果

   case文を後置(修飾子)にできることが確認できた
   ハッシュの初期化時に , のほかに改行でも
    区切ることができるようになった

   現状ではテストが未完了だが、できればそのうち
    正式にコミットしたい
   課題
       case文は既存の構文と衝突するので解決が必要
       ハッシュは特に問題ないのではないか (未確認)
1 of 14

Recommended

詳説ぺちぺち by
詳説ぺちぺち詳説ぺちぺち
詳説ぺちぺちdo_aki
2.1K views43 slides
PCさえあればいい。 by
PCさえあればいい。PCさえあればいい。
PCさえあればいい。bleis tift
17.1K views48 slides
BOF1-Scala02.pdf by
BOF1-Scala02.pdfBOF1-Scala02.pdf
BOF1-Scala02.pdfHiroshi Ono
344 views26 slides
Elixirだ 第1回強化版 後半 by
Elixirだ 第1回強化版 後半Elixirだ 第1回強化版 後半
Elixirだ 第1回強化版 後半Joe_noh
1.2K views43 slides
Elixirだ 第1回強化版 前半 by
Elixirだ 第1回強化版 前半Elixirだ 第1回強化版 前半
Elixirだ 第1回強化版 前半Joe_noh
3.6K views60 slides
Elixirだ 第2回 by
Elixirだ 第2回Elixirだ 第2回
Elixirだ 第2回Joe_noh
1.6K views54 slides

More Related Content

What's hot

Perl勉強会#2資料 by
Perl勉強会#2資料Perl勉強会#2資料
Perl勉強会#2資料Kiyo Tsunezumi
2.9K views37 slides
Lisp tutorial for Pythonista : Day 2 by
Lisp tutorial for Pythonista : Day 2Lisp tutorial for Pythonista : Day 2
Lisp tutorial for Pythonista : Day 2Ransui Iso
2.1K views51 slides
Project coin by
Project coinProject coin
Project coinAppresso Engineering Team
503 views33 slides
すごいHaskell読書会#1 in 大阪 by
すごいHaskell読書会#1 in 大阪すごいHaskell読書会#1 in 大阪
すごいHaskell読書会#1 in 大阪yashigani
1.8K views21 slides
Lisp batton - Common LISP by
Lisp batton - Common LISPLisp batton - Common LISP
Lisp batton - Common LISPMasaomi CHIBA
1.1K views27 slides
Write good parser in perl by
Write good parser in perlWrite good parser in perl
Write good parser in perlJiro Nishiguchi
2.9K views37 slides

What's hot(19)

Lisp tutorial for Pythonista : Day 2 by Ransui Iso
Lisp tutorial for Pythonista : Day 2Lisp tutorial for Pythonista : Day 2
Lisp tutorial for Pythonista : Day 2
Ransui Iso2.1K views
すごいHaskell読書会#1 in 大阪 by yashigani
すごいHaskell読書会#1 in 大阪すごいHaskell読書会#1 in 大阪
すごいHaskell読書会#1 in 大阪
yashigani1.8K views
Lisp batton - Common LISP by Masaomi CHIBA
Lisp batton - Common LISPLisp batton - Common LISP
Lisp batton - Common LISP
Masaomi CHIBA1.1K views
すごいConstたのしく使おう! by Akihiro Nishimura
すごいConstたのしく使おう!すごいConstたのしく使おう!
すごいConstたのしく使おう!
Akihiro Nishimura13.3K views
Patterns and Matching in Rust by DaichiMukai1
Patterns and Matching in RustPatterns and Matching in Rust
Patterns and Matching in Rust
DaichiMukai1118 views
Goの文法の実例と解説 by Ryuji Iwata
Goの文法の実例と解説Goの文法の実例と解説
Goの文法の実例と解説
Ryuji Iwata381 views
PHP5.5新機能「ジェネレータ」初心者入門 by kwatch
PHP5.5新機能「ジェネレータ」初心者入門PHP5.5新機能「ジェネレータ」初心者入門
PHP5.5新機能「ジェネレータ」初心者入門
kwatch22.2K views
Lisp Tutorial for Pythonista : Day 3 by Ransui Iso
Lisp Tutorial for Pythonista : Day 3Lisp Tutorial for Pythonista : Day 3
Lisp Tutorial for Pythonista : Day 3
Ransui Iso3.3K views
BoostAsioで可読性を求めるのは間違っているだろうか by Yuki Miyatake
BoostAsioで可読性を求めるのは間違っているだろうかBoostAsioで可読性を求めるのは間違っているだろうか
BoostAsioで可読性を求めるのは間違っているだろうか
Yuki Miyatake14.3K views
Elixir macro-in-action-1 by k1complete
Elixir macro-in-action-1Elixir macro-in-action-1
Elixir macro-in-action-1
k1complete1.2K views
Visual C++で使えるC++11 by nekko1119
Visual C++で使えるC++11Visual C++で使えるC++11
Visual C++で使えるC++11
nekko111936.8K views
メタメタプログラミングRuby by emasaka
メタメタプログラミングRubyメタメタプログラミングRuby
メタメタプログラミングRuby
emasaka992 views
Map by kikairoya
MapMap
Map
kikairoya10.2K views
初級者向けレッスン 51回 ─── 例外 by higaki
初級者向けレッスン 51回 ─── 例外初級者向けレッスン 51回 ─── 例外
初級者向けレッスン 51回 ─── 例外
higaki701 views

Similar to Rubyにおける構文追加の試み 〜ボクとRubyと俺々文法〜

Rails基礎講座 part.1 by
Rails基礎講座 part.1Rails基礎講座 part.1
Rails基礎講座 part.1Jun Yokoyama
1.2K views170 slides
JavaScriptクイックスタート by
JavaScriptクイックスタートJavaScriptクイックスタート
JavaScriptクイックスタートShumpei Shiraishi
2.3K views65 slides
2017年夏のPerl by
2017年夏のPerl2017年夏のPerl
2017年夏のPerlcharsbar
6.5K views60 slides
Ruby 同好会宣言 by
Ruby 同好会宣言Ruby 同好会宣言
Ruby 同好会宣言Yuya Takeyama
754 views63 slides
Perlで伝統芸能 by
Perlで伝統芸能Perlで伝統芸能
Perlで伝統芸能hitode909
1.6K views47 slides
Ruby初級者向けレッスン 54回 ─── クラス by
Ruby初級者向けレッスン 54回 ─── クラスRuby初級者向けレッスン 54回 ─── クラス
Ruby初級者向けレッスン 54回 ─── クラスhigaki
459 views32 slides

Similar to Rubyにおける構文追加の試み 〜ボクとRubyと俺々文法〜(15)

Rails基礎講座 part.1 by Jun Yokoyama
Rails基礎講座 part.1Rails基礎講座 part.1
Rails基礎講座 part.1
Jun Yokoyama1.2K views
2017年夏のPerl by charsbar
2017年夏のPerl2017年夏のPerl
2017年夏のPerl
charsbar6.5K views
Perlで伝統芸能 by hitode909
Perlで伝統芸能Perlで伝統芸能
Perlで伝統芸能
hitode9091.6K views
Ruby初級者向けレッスン 54回 ─── クラス by higaki
Ruby初級者向けレッスン 54回 ─── クラスRuby初級者向けレッスン 54回 ─── クラス
Ruby初級者向けレッスン 54回 ─── クラス
higaki459 views
Cookpad 17 day Tech internship 2017 言語処理系入門 Rubyをコンパイルしよう by Koichi Sasada
Cookpad 17 day Tech internship 2017 言語処理系入門 RubyをコンパイルしようCookpad 17 day Tech internship 2017 言語処理系入門 Rubyをコンパイルしよう
Cookpad 17 day Tech internship 2017 言語処理系入門 Rubyをコンパイルしよう
Koichi Sasada15.4K views
ゆるふわScalaコップ本読書会 第7章 by Yuta Yokoi
ゆるふわScalaコップ本読書会 第7章ゆるふわScalaコップ本読書会 第7章
ゆるふわScalaコップ本読書会 第7章
Yuta Yokoi550 views
ScalaプログラマのためのHaskell入門 by Yasuaki Takebe
ScalaプログラマのためのHaskell入門ScalaプログラマのためのHaskell入門
ScalaプログラマのためのHaskell入門
Yasuaki Takebe6.6K views
プログラミングHaskell(第1章) by yaju88
プログラミングHaskell(第1章)プログラミングHaskell(第1章)
プログラミングHaskell(第1章)
yaju884.6K views
BOF1-Scala02.pdf by Hiroshi Ono
BOF1-Scala02.pdfBOF1-Scala02.pdf
BOF1-Scala02.pdf
Hiroshi Ono485 views
BOF1-Scala02.pdf by Hiroshi Ono
BOF1-Scala02.pdfBOF1-Scala02.pdf
BOF1-Scala02.pdf
Hiroshi Ono858 views
Material by _TUNE_
MaterialMaterial
Material
_TUNE_3.5K views

More from Kenta USAMI

5分でわかる静的解析入門 by
5分でわかる静的解析入門5分でわかる静的解析入門
5分でわかる静的解析入門Kenta USAMI
3.5K views21 slides
なんとかStormに負けたくないEmacs初級篇 by
なんとかStormに負けたくないEmacs初級篇なんとかStormに負けたくないEmacs初級篇
なんとかStormに負けたくないEmacs初級篇Kenta USAMI
1.7K views16 slides
たのしい独自フレームワーク by
たのしい独自フレームワークたのしい独自フレームワーク
たのしい独自フレームワークKenta USAMI
8.7K views23 slides
Real World PHP in pixiv by
Real World PHP in pixivReal World PHP in pixiv
Real World PHP in pixivKenta USAMI
8.6K views31 slides
人類の役に立たないDSL、そしていつからRubyが最高の言語だと錯覚してた? with PHP by
人類の役に立たないDSL、そしていつからRubyが最高の言語だと錯覚してた? with PHP人類の役に立たないDSL、そしていつからRubyが最高の言語だと錯覚してた? with PHP
人類の役に立たないDSL、そしていつからRubyが最高の言語だと錯覚してた? with PHPKenta USAMI
2.4K views49 slides
はじめてのUser-Agent文字列 by
はじめてのUser-Agent文字列はじめてのUser-Agent文字列
はじめてのUser-Agent文字列Kenta USAMI
8.6K views22 slides

More from Kenta USAMI(20)

5分でわかる静的解析入門 by Kenta USAMI
5分でわかる静的解析入門5分でわかる静的解析入門
5分でわかる静的解析入門
Kenta USAMI3.5K views
なんとかStormに負けたくないEmacs初級篇 by Kenta USAMI
なんとかStormに負けたくないEmacs初級篇なんとかStormに負けたくないEmacs初級篇
なんとかStormに負けたくないEmacs初級篇
Kenta USAMI1.7K views
たのしい独自フレームワーク by Kenta USAMI
たのしい独自フレームワークたのしい独自フレームワーク
たのしい独自フレームワーク
Kenta USAMI8.7K views
Real World PHP in pixiv by Kenta USAMI
Real World PHP in pixivReal World PHP in pixiv
Real World PHP in pixiv
Kenta USAMI8.6K views
人類の役に立たないDSL、そしていつからRubyが最高の言語だと錯覚してた? with PHP by Kenta USAMI
人類の役に立たないDSL、そしていつからRubyが最高の言語だと錯覚してた? with PHP人類の役に立たないDSL、そしていつからRubyが最高の言語だと錯覚してた? with PHP
人類の役に立たないDSL、そしていつからRubyが最高の言語だと錯覚してた? with PHP
Kenta USAMI2.4K views
はじめてのUser-Agent文字列 by Kenta USAMI
はじめてのUser-Agent文字列はじめてのUser-Agent文字列
はじめてのUser-Agent文字列
Kenta USAMI8.6K views
pixivとl10n/i18n by Kenta USAMI
pixivとl10n/i18npixivとl10n/i18n
pixivとl10n/i18n
Kenta USAMI3.9K views
Rubicureに学ぶメタプログラミング by Kenta USAMI
Rubicureに学ぶメタプログラミングRubicureに学ぶメタプログラミング
Rubicureに学ぶメタプログラミング
Kenta USAMI3.2K views
Accept-language by Kenta USAMI
Accept-languageAccept-language
Accept-language
Kenta USAMI12.4K views
これからの名前の話をしよう by Kenta USAMI
これからの名前の話をしようこれからの名前の話をしよう
これからの名前の話をしよう
Kenta USAMI5.8K views
近況の報告と自宅警備員が失職した話 by Kenta USAMI
近況の報告と自宅警備員が失職した話近況の報告と自宅警備員が失職した話
近況の報告と自宅警備員が失職した話
Kenta USAMI2.1K views
学ばないDSL by Kenta USAMI
学ばないDSL学ばないDSL
学ばないDSL
Kenta USAMI1.2K views
札幌F#勉強会とは何だったのか by Kenta USAMI
札幌F#勉強会とは何だったのか札幌F#勉強会とは何だったのか
札幌F#勉強会とは何だったのか
Kenta USAMI1.7K views
tadsanとは誰か by Kenta USAMI
tadsanとは誰かtadsanとは誰か
tadsanとは誰か
Kenta USAMI2.3K views
DTの異常な愛情 または私は如何にして心配するのを止めてWILLCOMを愛するようになったか by Kenta USAMI
DTの異常な愛情 または私は如何にして心配するのを止めてWILLCOMを愛するようになったかDTの異常な愛情 または私は如何にして心配するのを止めてWILLCOMを愛するようになったか
DTの異常な愛情 または私は如何にして心配するのを止めてWILLCOMを愛するようになったか
Kenta USAMI872 views
PowerShell+Lisp = ? (第2回残パン会) by Kenta USAMI
PowerShell+Lisp = ? (第2回残パン会)PowerShell+Lisp = ? (第2回残パン会)
PowerShell+Lisp = ? (第2回残パン会)
Kenta USAMI1.6K views
キャンプ後の生活の変化とモチベーションの変化について by Kenta USAMI
キャンプ後の生活の変化とモチベーションの変化についてキャンプ後の生活の変化とモチベーションの変化について
キャンプ後の生活の変化とモチベーションの変化について
Kenta USAMI963 views
関数型都市忘年会『はじめての函数型プログラミング』 by Kenta USAMI
関数型都市忘年会『はじめての函数型プログラミング』関数型都市忘年会『はじめての函数型プログラミング』
関数型都市忘年会『はじめての函数型プログラミング』
Kenta USAMI2.2K views
After Camp 2011『今日から始める函数型プログラミング』(内容無し) by Kenta USAMI
After Camp 2011『今日から始める函数型プログラミング』(内容無し)After Camp 2011『今日から始める函数型プログラミング』(内容無し)
After Camp 2011『今日から始める函数型プログラミング』(内容無し)
Kenta USAMI749 views

Recently uploaded

光コラボは契約してはいけない by
光コラボは契約してはいけない光コラボは契約してはいけない
光コラボは契約してはいけないTakuya Matsunaga
30 views17 slides
パスキーでリードする: NGINXとKeycloakによる効率的な認証・認可 by
パスキーでリードする: NGINXとKeycloakによる効率的な認証・認可パスキーでリードする: NGINXとKeycloakによる効率的な認証・認可
パスキーでリードする: NGINXとKeycloakによる効率的な認証・認可Hitachi, Ltd. OSS Solution Center.
13 views22 slides
Keycloakの全体像: 基本概念、ユースケース、そして最新の開発動向 by
Keycloakの全体像: 基本概念、ユースケース、そして最新の開発動向Keycloakの全体像: 基本概念、ユースケース、そして最新の開発動向
Keycloakの全体像: 基本概念、ユースケース、そして最新の開発動向Hitachi, Ltd. OSS Solution Center.
110 views26 slides
PCCC23:東京大学情報基盤センター 「Society5.0の実現を目指す『計算・データ・学習』の融合による革新的スーパーコンピューティング」 by
PCCC23:東京大学情報基盤センター 「Society5.0の実現を目指す『計算・データ・学習』の融合による革新的スーパーコンピューティング」PCCC23:東京大学情報基盤センター 「Society5.0の実現を目指す『計算・データ・学習』の融合による革新的スーパーコンピューティング」
PCCC23:東京大学情報基盤センター 「Society5.0の実現を目指す『計算・データ・学習』の融合による革新的スーパーコンピューティング」PC Cluster Consortium
29 views36 slides
定例会スライド_キャチs 公開用.pdf by
定例会スライド_キャチs 公開用.pdf定例会スライド_キャチs 公開用.pdf
定例会スライド_キャチs 公開用.pdfKeio Robotics Association
154 views64 slides

Recently uploaded(7)

光コラボは契約してはいけない by Takuya Matsunaga
光コラボは契約してはいけない光コラボは契約してはいけない
光コラボは契約してはいけない
Takuya Matsunaga30 views
PCCC23:東京大学情報基盤センター 「Society5.0の実現を目指す『計算・データ・学習』の融合による革新的スーパーコンピューティング」 by PC Cluster Consortium
PCCC23:東京大学情報基盤センター 「Society5.0の実現を目指す『計算・データ・学習』の融合による革新的スーパーコンピューティング」PCCC23:東京大学情報基盤センター 「Society5.0の実現を目指す『計算・データ・学習』の融合による革新的スーパーコンピューティング」
PCCC23:東京大学情報基盤センター 「Society5.0の実現を目指す『計算・データ・学習』の融合による革新的スーパーコンピューティング」
PCCC23:富士通株式会社 テーマ1「次世代高性能・省電力プロセッサ『FUJITSU-MONAKA』」 by PC Cluster Consortium
PCCC23:富士通株式会社 テーマ1「次世代高性能・省電力プロセッサ『FUJITSU-MONAKA』」PCCC23:富士通株式会社 テーマ1「次世代高性能・省電力プロセッサ『FUJITSU-MONAKA』」
PCCC23:富士通株式会社 テーマ1「次世代高性能・省電力プロセッサ『FUJITSU-MONAKA』」

Rubyにおける構文追加の試み 〜ボクとRubyと俺々文法〜

  • 1. Rubyにおける構文追加の試み 〜ボクとRubyと俺々文法〜 プログラミングコース 言語組 宇佐美 健太
  • 2. やりたいこと  Rubyに新しい文法を追加したい  後置のcase文(修飾子)  改行をハッシュの区切り記号に!
  • 3. Rubyに後置case文を追加  Rubyのcase文はCのswitchに相当 C Ruby switch(var){ switch case var case 1: when 1 then puts(”case 1”); puts ”case 1” break; when 2 then case 2: puts ”case 2” puts(”case 2”); else break; puts ”default” default: default end puts(”default”); }
  • 4. Rubyに後置case文を追加  修飾子による制御 a=0,x=100,y=false puts ”#{a=a+1}” while a<10 puts ”x=#{x}” if x==100 puts ”y=#{y}” unless y z=(1/0) rescue puts ”zero div!”  ここにcase文も追加したい! N=10, m=false puts ”Hello” case n when (1..20) puts ”Welcome” case when m
  • 5. Rubyに後置case文を追加  後置case whenを追加したい!  どうやるの? パーサを編集して、Rubyに新たな規則を追加!  Rubyは構文解析にYaccを使用  ”Yet Another Compiler-Compiler”  字句解析されてきたコードを  parse.y (yaccファイル) を編集  既存の規則と衝突しないように追加
  • 6. Rubyに後置case文を追加 var = 3 puts "Hello" case var when (1..5) NODE_CASE 構文木 NODE_DVAR var NODE_WHEN NODE_ARRAY NODE_FCALL (1..5) puts(“Hello”)
  • 7. Rubyに後置case文を追加  yacc文法規則 primary:k_case expr_value opt_terms case_body k_end { $$ = NEW_CASE($2, $4); $2 $4 } primary: stmt modifier_case expr_value keyword_when args { $$=NEW_CASE($3,NEW_WHEN($5,$1,0)); $3 $5 $1 }
  • 8. Rubyに後置case文を追加  新しい文法規則を追加した結果 #追加した構文 puts”ok” case gets() when 'x','y','z' #既存の構文 g = gets puts”ok” if g=='x'||g=='y'||g=='z' case gets when 'x','y','z' puts ”ok” end
  • 9. #既存の構文 t = true case t when true then puts”ok” end #=>”ok” #干渉しない!
  • 10. Rubyに後置case文を追加 #既存の構文 def say arg;p arg;end say case option when :ruby then s.to_ruby when :marshal then ... else s.to_yaml end #syntax error, unexpected 'n', expecting keyword_when #なにそれ読めない! Rubyでおk
  • 11. ハッシュの,を省略  Rubyのハッシュ settings={ ”userid” =>”myuser” , ”passwd” =>”PassWord” , ”host” =>”127.0.0.1” } puts(settings[”userid”]) #=>”myuser” puts settings[”passwd”] #=>”PassWord” 各行末に , を書く必要があって、ちょっとめんどい! だから区切りの , を省略したい!
  • 12. ハッシュの , を省略  つまりこう書きたい hash={ ”key” => ”kanon” ”key2” => ”air” ”chao” => ”leaf” } key={ 1999=>"Kanon",2000=>"AIR" 2004=>"CLANNAD",2007=>"Little Busters!" } いちいち行末に , を書かなくても良いので、 見ためが非常にすっきりして書きやすい!
  • 13. ハッシュの , を省略  結果 => できました。  ハッシュの区切り ( , ) を ( , 'n') にしただけ! n  メソッドの引数や配列の区切りと兼用だったので、ハッ シュだけを隔離。  メソッドに渡す引数も改行で区切りできると便利なのだ けれど、今回のところは断念。  Rubyはメソッド呼び出しの括弧は省略がデフォなので、 これに対応しようとするとカオス! Leaf = Hash[ 1997=>"ToHeart",1998=>"WHITE ALBUM" 1999=>"Comic Party",2004=>"ToHeart2" ] # {}に似てるけど、Hash#[]はメソッド呼びだし {} []
  • 14. 今回の成果  case文を後置(修飾子)にできることが確認できた  ハッシュの初期化時に , のほかに改行でも 区切ることができるようになった  現状ではテストが未完了だが、できればそのうち 正式にコミットしたい  課題  case文は既存の構文と衝突するので解決が必要  ハッシュは特に問題ないのではないか (未確認)