gpt4 book ai didi

types - Julia 中的强制整数类型参数

转载 作者:行者123 更新时间:2023-12-02 09:18:44 24 4
gpt4 key购买 nike

我想定义一个简单的类型来表示 n维形状,类型参数包含 n .

julia> struct Shape{n}
name::String
end

julia> square = Shape{2}("square")
Shape{2}("square")

julia> cube = Shape{3}("cube")
Shape{3}("cube")

julia> dim(::Shape{n}) where n = n
dim (generic function with 1 method)

julia> dim(cube)
3

虽然此解决方案确实有效,但它接受非整数值 n没有问题。
julia> Shape{'?'}("invalid")
Shape{'?'}("invalid")

我最初的想法是在 n 上使用约束。在 struct宣言。但是,我认为应该完成的两种方式似乎都不起作用。
julia> struct Shape{n} where n <: Int
name::String
end
ERROR: syntax: invalid type signature

julia> struct Shape{n<:Int}
name::String
end

julia> Shape{2}("circle")
ERROR: TypeError: Shape: in n, expected n<:Int64, got Int64

我也尝试使用内部构造函数,但这似乎也不起作用。
julia> struct Shape{n}
Shape{n}(name) where n <: Int = new(name)
name::String
end

julia> Shape{2}("circle")
ERROR: MethodError: Cannot `convert` an object of type String to an object of type Shape{2}
This may have arisen from a call to the constructor Shape{2}(...),
since type constructors fall back to convert methods.
Stacktrace:
[1] Shape{2}(::String) at ./sysimg.jl:24

我正在使用 Julia 0.6.0-rc3.0 .

我怎样才能实现所需的行为?

最佳答案

n的类型是 Int ,但它不是 DataType这是 <:Int .你需要让它在 n 处,然后 @assert typeof(n) <: Int在构造函数里面。

 struct Shape{n}
name::String
function Shape{n}(name) where n
@assert typeof(n) <: Int
new(name)
end
end
Shape{2}("square")
Shape{:hi}("square")

关于types - Julia 中的强制整数类型参数,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/44486180/

24 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com