class Lists
{
Void main( )
{
//literals
//access
//modify
//stack
//iteration
//search
//join
//map
//reduce
//sorting
readOnly
}
Void readOnly( )
{
q := [ "a" , "b" , "c" ]
r := q.rw ; show( r, "rw on read/write returns this (r === q)" )
s := q.ro ; show( s, "s is readonly with items in q" )
t := s.ro ; show( t, "ro on readonly returns this (t === s)" )
u := s.rw ; show( u, "read/write with items in s (u !== s)" )
show( s.isRO , "returns true" )
show( s.isRW , "return false" )
}
Void show( Obj? result, Str what)
{
resultStr := "" + result
if ( resultStr.size > 40 ) resultStr = resultStr[ 0 ..40 ] + "..."
echo( what.padr ( 40 ) + " => " + resultStr)
}
}
Y2xhc3MgTGlzdHMKewogIFZvaWQgbWFpbigpCiAgewogICAgLy9saXRlcmFscwogICAgLy9hY2Nlc3MKICAgIC8vbW9kaWZ5CiAgICAvL3N0YWNrCiAgICAvL2l0ZXJhdGlvbgogICAgLy9zZWFyY2gKICAgIC8vam9pbgogICAgLy9tYXAKICAgIC8vcmVkdWNlCiAgICAvL3NvcnRpbmcKICAgIHJlYWRPbmx5CiAgfQoKCgogIFZvaWQgcmVhZE9ubHkoKQogIHsKICAgIHEgOj0gWyJhIiwgImIiLCAiYyJdCiAgICByIDo9IHEucnc7ICBzaG93KHIsICJydyBvbiByZWFkL3dyaXRlIHJldHVybnMgdGhpcyAociA9PT0gcSkiKQogICAgcyA6PSBxLnJvOyAgc2hvdyhzLCAicyBpcyByZWFkb25seSB3aXRoIGl0ZW1zIGluIHEiKQogICAgdCA6PSBzLnJvOyAgc2hvdyh0LCAicm8gb24gcmVhZG9ubHkgcmV0dXJucyB0aGlzICh0ID09PSBzKSIpCiAgICB1IDo9IHMucnc7ICBzaG93KHUsICJyZWFkL3dyaXRlIHdpdGggaXRlbXMgaW4gcyAodSAhPT0gcykiKQogICAgc2hvdyhzLmlzUk8sICAgICAgICAicmV0dXJucyB0cnVlIikKICAgIHNob3cocy5pc1JXLCAgICAgICAgInJldHVybiBmYWxzZSIpCiAgfQoKICBWb2lkIHNob3coT2JqPyByZXN1bHQsIFN0ciB3aGF0KQogIHsKICAgIHJlc3VsdFN0ciA6PSAiIiArIHJlc3VsdAogICAgaWYgKHJlc3VsdFN0ci5zaXplID4gNDApIHJlc3VsdFN0ciA9IHJlc3VsdFN0clswLi40MF0gKyAiLi4uIgogICAgZWNobyh3aGF0LnBhZHIoNDApICsgIiA9PiAiICsgcmVzdWx0U3RyKQogIH0KCn0=
stdout
rw on read/write returns this (r === q) => [a, b, c]
s is readonly with items in q => [a, b, c]
ro on readonly returns this (t === s) => [a, b, c]
read/write with items in s (u !== s) => [a, b, c]
returns true => true
return false => false