90 likes | 357 Views
言語組・課題 ≪ Ruby の構文拡張≫. Goal. ( Ruby の) 構文解析の仕組みを知ろう!! Ruby を改造して新しい構文を作れるくらい 詳しくなろう!!. こんなの作ってみるとどうでしょう? 1: カンマの省略. http://www.atdot.net/~ko1/diary/201007.html#d20 「 Ruby で設定ファイルを書かせる 」 「でも , Ruby の Hash リテラルは , カンマ を要求するので書きづらそうな気が する」. setting = { a: 1 , b: 2 , c: 3 }.
E N D
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: 1 b: 2 c: 3 } baz( a: 1 b: 2 c: {x: 1 y: 2 z: 3} )
2: 後置 case ~ when • Ruby は、if や while などを後ろに書ける • case 文もできると便利では!? if x==“hello” puts “world” end puts “world” if x==“hello” 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 /^(.)$/; puts “1文字: #{$1}” when /^(.)(.)$/; puts “2文字: #{$1} #{$2}” when /^a(..)z$/; puts “aで始まりzで終わる4文字” end match arr when [x]; puts “1文字: #{x}“ when [x,y]; puts “2文字: #{x} #{y}“ when [10,x,y,20]; puts “10で始まり20で終わる4要素” when [[*_],*_]; puts “先頭が配列” end
7: その他 おもしろそうな構文を思いついたらなんでもどうぞ