Julia文档说:
基本类型是一种具体类型,其数据由普通旧类型组成 位。原始类型的经典示例是整数和 浮点值。与大多数语言不同,Julia允许您声明 你自己的原始类型,而不是只提供一组固定的 内置的。实际上,标准基元类型都是定义的 在语言本身:
我无法在文档或源代码或其他任何地方找到如何执行此操作的示例。我正在寻找的是一个如何声明基本类型的示例,以及如何随后通过操作这些位来实现该类型的函数或方法。
有人能指出我的榜样吗?感谢。
编辑:它清楚如何声明基本类型,因为文档中上面引用的下面有例子。我希望获得有关如何随后操纵它们的信息。例如,假设我想(毫无意义地)实现我自己的原始类型MyInt8
。我可以用primitive type MyInt8 <: Signed 8 end
声明。但是,我如何随后实现一个操作myplus
中的位的函数Myint8
?
答案 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上的任何标准位操作函数。