summary refs log tree commit diff stats
path: root/tests/tuples/tuple_subscript.nim
blob: 021793dc3f95dd1ecc715031ec90db819b6f3b63 (plain) (blame)
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
discard """
  output: '''5
5
str2
str2
4'''
"""

proc`[]` (t: tuple, key: string): string =
  for name, field in fieldPairs(t):
    if name == key: 
      return $field
  return ""


proc`[]` [A,B](t: tuple, key: string, op: (proc(x: A): B)): B =
  for name, field in fieldPairs(t):
    when field is A:
      if name == key: 
        return op(field)

proc`[]=`[T](t: var tuple, key: string, val: T) =
  for name, field in fieldPairs(t):
    when field is T:
      if name == key: 
        field = val

var tt = (a: 1, b: "str1")

# test built in operator
tt[0] = 5
echo tt[0] 
echo `[]`(tt, 0)


# test overloaded operator
tt["b"] = "str2"
echo tt["b"] 
echo `[]`(tt, "b")
echo tt["b", proc(s: string) : int = s.len]