Open3

Nimの型クラスの小ネタ

NeoNeo

型クラス:型に別名を付けられる

type Number = int or float # int | float でも可
NeoNeo

直和型の変数は、一度どちらかの型にするとその型の変数として振る舞う

type TypeClass = int | string

var foo: TypeClass = 1
foo = 2 # OK
foo = "bar" # int型として振る舞うためerror
NeoNeo

組み込みの型と型クラスは、ジェネリクスの型制約に使える

proc onlyIntOrStr[T: int | string](x, y: T) = discard

onlyIntOrStr(1, 2) # OK
onlyIntOrStr(1.0, 2) # error
onlyIntOrStr(1, "2") # 同時に複数の型として振る舞えないのでerror