概要
- nimではc++のように演算子のオーバーロードができる
- 演算子のオーバーロードは便利だけどトリッキーな使い方をすると可読性が損なわれるので注意
サンプルコード
- 演算子をオーバーロードする場合は`(バッククオート)で括って演算子を記述
- procで宣言して演算子を実装する
- アクセスレベルを指定することができる
example.nim
type
NumbersObj = object of RootObj
number1: int
number2: int
Numbers = ref NumbersObj
proc echoNumbers(foo: Numbers) =
echo "number1: " & $foo.number_1
echo "number2: " & $foo.number_2
proc `+=`(foo: Numbers, value: int) =
foo.number_1 += value
foo.number_2 += value
proc `[]=`(foo: Numbers, index: int, value: int) =
case index
of 0: foo.number_1 = value
of 1: foo.number_2 = value
else: discard
let foo = new Numbers
echo "set property"
foo.number_1 = 10
foo.number_2 = 20
foo.echoNumbers()
echo ""
echo "add value"
foo += 10
foo.echoNumbers()
echo ""
echo "set value by index"
foo[0] = 100
foo[1] = 200
foo.echoNumbers()
実行結果
set property
number1: 10
number2: 20
add value
number1: 20
number2: 30
set value by index
number1: 100
number2: 200