--- format: rst toc: no ... ================== 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 ``nil`` 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