LoginSignup
1
1

More than 5 years have passed since last update.

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

Last updated at Posted at 2018-02-27

概要

  • 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
1
1
0

Register as a new user and use Qiita more conveniently

  1. You get articles that match your needs
  2. You can efficiently read back useful information
  3. You can use dark theme
What you can do with signing up
1
1