在Julia中实现自定义基元类型

时间:2017-11-23 09:50:01

标签: julia

Julia文档说:

  

基本类型是一种具体类型,其数据由普通旧类型组成   位。原始类型的经典示例是整数和   浮点值。与大多数语言不同,Julia允许您声明   你自己的原始类型,而不是只提供一组固定的   内置的。实际上,标准基元类型都是定义的   在语言本身:

我无法在文档或源代码或其他任何地方找到如何执行此操作的示例。我正在寻找的是一个如何声明基本类型的示例,以及如何随后通过操作这些位来实现该类型的函数或方法。

有人能指出我的榜样吗?感谢。

编辑:它清楚如何声明基本类型,因为文档中上面引用的下面有例子。我希望获得有关如何随后操纵它们的信息。例如,假设我想(毫无意义地)实现我自己的原始类型MyInt8。我可以用primitive type MyInt8 <: Signed 8 end声明。但是,我如何随后实现一个操作myplus中的位的函数Myint8

如果PS有所帮助,我问的原因不是因为我需要在Julia做任何具体的事情;我正在设计自己的语言以获得乐趣,并正在研究其他语言如何实现各种各样的事情。

1 个答案:

答案 0 :(得分:9)

# Declare the new type.
primitive type MyInt8 <: Signed 8 end

# A constructor to create values of the type MyInt8.
MyInt8(x :: Int8) = reinterpret(MyInt8, x)

# A constructor to convert back.
Int8(x :: MyInt8) = reinterpret(Int8, x)

# This allows the REPL to show values of type MyInt8.
Base.show(io :: IO, x :: MyInt8) = print(io, Int8(x))

# Declare an operator for the new type.
import Base: +

+ (a :: MyInt8, b :: MyInt8) = MyInt8(Int8(a) + Int8(b))

这里的关键功能是reinterpret。它允许将Int8的位表示视为新类型。

要在MyInt8构造函数中存储具有自定义位布局的值,您可以在将它们“重新解释”为MyInt8之前执行Int8上的任何标准位操作函数。