= Literals = Cobra provides a convenient way to specify literals for initializing standard collections and [[BR]] explicitly setting the types (size and sign) for numeric literals. == List Literals == List contents comma separated, collection [] delimited. Empty list is [] e.g {{{ names = [ 'mike', 'gary', 'pat', 'bruce', 'paul'] # List heads = [3,1,1,1,1] # List if name in [ 'fred', 'george', 'bill' ] myList=[] myList.add('1th') }}} == Map/Dictionary Literals == Key and value colon separated, each entry comma separated, collection {} delimited. empty map is {:}. e.g. {{{ nameId = { 'mike':10110, 'gary':21003, 'paul':32289 } # Dictionary assert nameId['mike'] == 10110 order = { 0:'mike', 1:'bruce', 2:'gary', 3:'pat' } # Dictionary mmap = {:} mmap['top'] = 99 }}} == Set Literals == Values comma separated, collection {} delimited. Empty set is {}. e.g. {{{ names= {'gary', 'mike', 'bruce', 'paul'} assert names.intersection({'gary', 'paul'} == {'gary', 'paul'} assert not names.isSuperSetOf({'paula'}) collisions={} collisions.add(toyota) }}} == Numeric Literals == Non explicitly typed numeric Literals are typed to Decimal by default.[[BR]] This can be overidden by the compiler '''-number''' commandline switch or '''@number''' compiler directive. Explicitly typed numeric literals can be specified by suffixing the numeric literal with a sign and size specification ( with an optional leading '_'). Signs are u - unsigned. i - signed Sizes are 8 16 32 64 as in {{{ i = 123 # default (Decimal) ii = 123i # integer (default size) 32 bits # same as ii = 123 to int j = 123_i16 # signed 16 bit k = 32u8 # unsigned 8 bit == Byte l = 879289992978_i64 # signed 64 bit }}}