我可以在 julia 中定义一个类似于原始数据类型的新类型吗?

Posted

技术标签:

【中文标题】我可以在 julia 中定义一个类似于原始数据类型的新类型吗?【英文标题】:Can I define a new type in julia that acts like primitive data type? 【发布时间】:2021-11-16 05:57:40 【问题描述】:

我需要知道是否有任何方法可以在 Julia 中定义一种类似于原始数据类型的新类型,例如:

struct test
 att1::MyType
end

假设我的MyType 只是从 1 到 10。那么如果我创建一个这样的实例:

test1=test(11) 它应该给我一个错误。

我猜想有一种更简单的方法可以做到这一点,但我需要将 MyType 扩展的不止是从 1 到 10。

【问题讨论】:

我不确定原始类型是否适合这里。您必须指定与多个字节(8、16、24 等)对齐的位数 N,并且所有此类整数类型都有 2^N 值(通过溢出循环)。它不会与 [1,10] 之类的任意限制保持一致。像原始 Int8 循环 [-128,127] 这样循环 [1,10] 的类型重新实现算术会很复杂。如果要实现任意限制,则需要参数类型。对现有类型使用限制检查和取模会更容易。 同意 BatWannaBe:你可以在没有原始类型的情况下做“低级”的事情。例如,看看 Julia 如何实现复数:github.com/JuliaLang/julia/blob/master/base/complex.jl。这些是非常低级的,但没有使用primitive。只需使用内部构造函数:docs.julialang.org/en/v1/manual/constructors/… 【参考方案1】:

定义原始类型的方法在 Julia 手册中的 here 中有描述。

在 InlineStrings.jl 包中,您有一个出色的演示代码 here 如何在实践中使用自定义构造函数定义此类类型(我假设您希望这样做,因为我猜您想在您执行参数的有效范围时执行检查运行你的类型的构造函数)。

【讨论】:

以上是关于我可以在 julia 中定义一个类似于原始数据类型的新类型吗?的主要内容,如果未能解决你的问题,请参考以下文章

在Julia时间将数据类型UInt64更改为Float

julia系列2:数据结构

julia系列2:数据结构

julia系列2:数据结构

行绑定Julia数据帧

从抽象类型访问字段时,julia 类型不稳定