-
Notifications
You must be signed in to change notification settings - Fork 0
Language Elements
Paul Götze edited this page Sep 22, 2015
·
1 revision
Blocks:
CodeBreaker.parse("5.times { |n| puts n }")
# => {
# :block=>[
# [Fixnum, :times],
# {:args=>[{:arg=>:n}]},
# [:puts, {:lvar=>:n}]
# ]
# }
CodeBreaker.parse("[1, 2].reduce(0) { |sum, n| sum += n }")
# => {
# :block=>[
# [{:array=>[Fixnum, Fixnum]}, :reduce, Fixnum],
# {:args=>[{:arg=>:sum}, {:arg=>:n}]},
# {:op_asgn=>[{:lvasgn=>[:sum]}, :+, {:lvar=>:n}]}
# ]
# }Block passes:
CodeBreaker.parse("[1, 2].map &:to_s")
# => [{:array=>[Fixnum, Fixnum]}, :map, {:block_pass=>:to_s}]Block arguments:
CodeBreaker.parse("def greet(name, &block)\n'hello!'\nend")
# => {:def=>[:greet, {:args=>[{:arg=>:name}, {:blockarg=>:block}]}, String]}Rest arguments:
CodeBreaker.parse("def greet(name, *args)\n'hello!'\nend")
# => {:def=>[:greet, {:args=>[{:arg=>:name}, {:restarg=>:args}]}, String]}Optional arguments:
CodeBreaker.parse("def greet(name, options = {a: 1})\n'hello!'\nend")
# => {
# :def=>[
# :greet,
# {
# :args=>[
# {:arg=>:name},
# {:optarg=>[:options, {:hash=>[{Symbol=>Fixnum}]}]}
# ]
# },
# String
# ]
# }Keyword arguments:
CodeBreaker.parse("def greet(title:, name:)\n\nend")
# => {:def=>[:greet, {:args=>[{:kwarg=>:title}, {:kwarg=>:name}]}]}Optional keyword arguments:
CodeBreaker.parse("def greet(title: 'Mr.')\n\nend")
# => {:def=>[:greet, {:args=>[{:kwoptarg=>[:title, String]}]}]}Rest keyword arguments:
CodeBreaker.parse("def greet(name:, **opts)\n\nend")
# => {:def=>[:greet, {:args=>[{:kwarg=>:name}, {:kwrestarg=>:opts}]}]}Splat operator:
CodeBreaker.parse("puts(*[1,2])")
# => [:puts, {:splat=>{:array=>[Fixnum, Fixnum]}}]