Create an object/Native demonstration: Difference between revisions

Content added Content deleted
(Add Nim)
Line 395: Line 395:
</pre>
</pre>


=={{header|Nim}}==
We leverage native stdlib table as our own object by implementing limited actual native table functionalities.
<lang nim>import tables, options

type
MyTable = object
table: TableRef[string, int]

# return empty if the key is not available
proc `[]`(m: MyTable, key: string): Option[int] =
if key in m.table: result = some m.table[key]
else: result = none int

# update an item, doing nothing if the key is available during first initialization
proc `[]=`(m: var MyTable, key: string, val: int) =
if key notin m.table: return
m.table[key] = val

proc reset(m: var MyTable) =
for _, v in m.table.mpairs: v = 0

# sugar for defining MyTable object
proc toTable(vals: openarray[(string, int)]): MyTable =
result.table = newTable vals

proc main =
# MyTable construction
var myobj = {"key1": 1, "key2": 2, "key3": 3}.toTable
# test getting existing key
let val1 = myobj["key1"]
if val1.isSome: echo "val1: ", val1.get

# test adding new key
myobj["key4"] = 4
let val4 = myobj["key4"]
if val4.isSome: echo val4.get
else: echo "val4 is empty"

# test reset and test whether its value is zero-ed
reset myobj
doAssert myobj["key3"].get == 0

main()
</lang>
{{output}}
<pre>
val1: 1
val4 is empty</pre>
=={{header|Perl}}==
=={{header|Perl}}==
<lang perl>package LockedHash;
<lang perl>package LockedHash;