尼姆。如何继承不同类型的所有操作?
Nim. How to inherit all operations on distinct type?
假设,我有 type Radians = distinct float
和 type Degrees = distinct float
这不允许我使用浮点数可用的所有操作,甚至是最基本的算术 +
、-
、*
有什么方法可以对它们全部进行排序 'inherit' 并仅将 distinct
用于编译时检查?
查看 nim 手册中 Distinct 类型的 Modeling Currencies 部分以获取完整示例。
总结:
使用借用编译指示
proc `*` (x: int, y: Dollar): Dollar {.borrow.}
proc `div` (x: Dollar, y: int): Dollar {.borrow.}
使用模板减少样板文件
template multiplicative(typ, base: typedesc) =
proc `*` *(x: typ, y: base): typ {.borrow.}
proc `*` *(x: base, y: typ): typ {.borrow.}
proc `div` *(x: typ, y: base): typ {.borrow.}
proc `mod` *(x: typ, y: base): typ {.borrow.}
假设,我有 type Radians = distinct float
和 type Degrees = distinct float
这不允许我使用浮点数可用的所有操作,甚至是最基本的算术 +
、-
、*
有什么方法可以对它们全部进行排序 'inherit' 并仅将 distinct
用于编译时检查?
查看 nim 手册中 Distinct 类型的 Modeling Currencies 部分以获取完整示例。
总结:
使用借用编译指示
proc `*` (x: int, y: Dollar): Dollar {.borrow.}
proc `div` (x: Dollar, y: int): Dollar {.borrow.}
使用模板减少样板文件
template multiplicative(typ, base: typedesc) =
proc `*` *(x: typ, y: base): typ {.borrow.}
proc `*` *(x: base, y: typ): typ {.borrow.}
proc `div` *(x: typ, y: base): typ {.borrow.}
proc `mod` *(x: typ, y: base): typ {.borrow.}