Edited at

nim 演算子のオーバーロード

More than 1 year has passed since last update.


概要


  • 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