1 / 9

言語組・課題 ≪ Ruby の構文拡張≫

言語組・課題 ≪ Ruby の構文拡張≫. Goal. ( Ruby の) 構文解析の仕組みを知ろう!! Ruby を改造して新しい構文を作れるくらい 詳しくなろう!!. こんなの作ってみるとどうでしょう? 1: カンマの省略. http://www.atdot.net/~ko1/diary/201007.html#d20 「 Ruby で設定ファイルを書かせる 」 「でも , Ruby の Hash リテラルは , カンマ を要求するので書きづらそうな気が する」. setting = { a: 1 , b: 2 , c: 3 }.

cliff
Download Presentation

言語組・課題 ≪ Ruby の構文拡張≫

An Image/Link below is provided (as is) to download presentation Download Policy: Content on the Website is provided to you AS IS for your information and personal use and may not be sold / licensed / shared on other websites without getting consent from its author. Content is provided to you AS IS for your information and personal use only. Download presentation by click this link. While downloading, if for some reason you are not able to download a presentation, the publisher may have deleted the file from their server. During download, if you can't get a presentation, the file might be deleted by the publisher.

E N D

Presentation Transcript


  1. 言語組・課題≪Ruby の構文拡張≫

  2. Goal • (Ruby の) 構文解析の仕組みを知ろう!! • Ruby を改造して新しい構文を作れるくらい詳しくなろう!!

  3. こんなの作ってみるとどうでしょう?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} )

  4. 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

  5. 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

  6. 4: ハッシュの分割代入 • (参照: JavaScript 等) x = myHash[:foo] y = myHash[:bar] myHash = {foo: 1, bar: 2} {foo:x, bar:y} = myHash

  7. 5: マルチバイト演算子 • 「×」 や 「÷」 を使えるRuby! • もっと一般的に? puts 3×8÷2 infix waru 8 waru 2 # => 8.waru(2)

  8. 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

  9. 7: その他 おもしろそうな構文を思いついたらなんでもどうぞ

More Related