言語組・課題 ≪Ruby の構文拡張≫ Goal • (Ruby の) 構文解析の仕組みを知ろう!! • Ruby を改造して新しい構文を作れるくらい 詳しくなろう!! こんなの作ってみるとどうでしょう? 1: カンマの省略 • http://www.atdot.net/~ko1/diary/201007.html#d20 – 「Ruby で設定ファイルを書かせる 」 – 「でも,Ruby の Hash リテラルは, カンマを要求するので書きづらそうな気がする」 setting = { a: 1, b: 2, c: 3 } setting a: b: c: } = { 1 2 3 baz( a: 1 b: 2 c: {x: 1 y: 2 z: 3} ) 2: 後置 case ~ when • Ruby は、if や while などを後ろに書ける if x==“hello” puts “world” end puts “world” if x==“hello” • case 文もできると便利では!? case obj when 100, 200 puts “ok!” end puts “ok!” case obj when 100, 200 3: 1行関数略記法 • 関数の中身が1文で済む時の略記法 – (参照: Scala 等) def f(x,y) x*x + y*y end def f(x,y) = x*x + y*y def f(x,y); x*x + y*y; end 4: ハッシュの分割代入 • (参照: JavaScript 等) x = myHash[:foo] y = myHash[:bar] myHash = {foo: 1, bar: 2} {foo:x, bar:y} = myHash 5: マルチバイト演算子 • 「×」 や 「÷」 を使えるRuby! puts 3×8÷2 • もっと一般的に? infix waru 8 waru 2 # => 8.waru(2) 6: パターンマッチ • (参照: Haskell, ML, Scala 等) case str when /^(.)$/; when /^(.)(.)$/; when /^a(..)z$/; end match arr when [x]; when [x,y]; when [10,x,y,20]; when [[*_],*_]; end puts “1文字: #{$1}” puts “2文字: #{$1} #{$2}” puts “aで始まりzで終わる4文字” puts puts puts puts “1文字: #{x}“ “2文字: #{x} #{y}“ “10で始まり20で終わる4要素” “先頭が配列” 7: その他 おもしろそうな構文を 思いついたら なんでもどうぞ
© Copyright 2024 ExpyDoc