【发布时间】: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/…
标签: julia primitive-types