================== Ruby ================== .. note:: This information is very rough, it's mostly my notes about what is different about Ruby syntax compared to similar modern interpreted pan-paradigm languages like Python. A unique intro to ruby is `"Why's Poignant Guide to Ruby"`__, a web-comic-y short free online book by why the luck stiff. The more serious reference is the "pickax" book. __ http://poignantguide.net/ Blocks --------- Blocks of code can be passed to functions, making ruby code more of a first order data type. Ranges ---------- >>> 2..7 # => 2..7 >>> (2..7).to_a # => [2, 3, 4, 5, 6, 7] >>> (2...7).to_a # => [2, 3, 4, 5, 6] >>> ('e'..'h').to_a # => ["e", "f", "g", "h"] Control Structures -------------------- Can use ``if`` after a statement:: >>> a = c if c > b Along with the usual ``break`` and ``next``, there is ``redo`` which redoes the current loop (initial conditions may have been changed). Boolean Operators -------------------- Anything that is not ``nill`` or ``false`` is true. To force interpretation as boolean, use ``!!`` (not not):: >>> !!(nil) # => false >>> !!(true) # => true >>> !!('') # => true >>> !!(0) # => true >>> !!({}) # => true Misc ---------------- Can use nasty Perl style regular expression stuff:: >>> re1 = /\d+/ >>> "There are 5 kilos of chunky bacon on the table!" =~ re1 # => 10, the index >>> $~ # => # >>> $~.pre_hash # => "There are " Also $1, $2, etc. The "splat operator", '*', either collects or expands extra arguments depending on syntax (I think this is kind of icky):: >>> a, b = 1, 2, 3, 4 # a=1, b=2 >>> a, *b = 1, 2, 3, 4 # a=1, b=[2,3,4] >>> c, d = 5, [6, 7, 8] # c=5, d=[6,7,8] >>> c, d = 5, *[6, 7, 8] # c=5, b=6