types - 为什么以下类型声明和/或实例化在 Julia 1.0 中不起作用?
问题描述
我有一个圆圈类型
struct Circle{T <: Real}
# radius is a subtype of
# the real number approximation types
R::T
# The center is a named pair of real
# number approximation types
C::NamedTuple{T, T}
end
我想用它来实例化
circles = NamedTuple(
A = Circle(1, ( 1, 1)),
B = Circle(1, ( 2, 2))
)
产生错误
ERROR: LoadError: MethodError: no method matching Circle(::Int64, ::Tuple{Int64,Int64})
Closest candidates are:
Circle(::T<:Real, ::NamedTuple{T<:Real,T<:Real}) where T<:Real
为什么会发生此错误,我做错了什么?
解决方案
命名元组由名称和元组参数化:
julia> struct Circle{T <: Real}
R::T
C::NamedTuple
Circle(r::T, c::NamedTuple{N,Tuple{T,T}}) where {N, T <: Real} = new{T}(r,c)
end
julia> Circle(1, (a=1, b=2))
Circle{Int64}(1, (a = 1, b = 2))
如果你想Circle
用一个元组构造一个,你可以提供一个默认映射:
julia> function Circle(r::T, c::Tuple{T,T}) where {T <: Real}
a, b = c
return Circle(r, (a=a, b=b))
end
Circle
julia> Circle(1, (1, 2))
Circle{Int64}(1, (a = 1, b = 2))
如果您不需要命名元组,则可以使用常规元组:
julia> struct Circle{T <: Real}
R::T
C::Tuple{T, T}
end
julia> Circle(1, (1, 2))
Circle{Int64}(1, (1, 2))
推荐阅读
- d3.js - colourscheme 和 scaleOrdinal
- javascript - 页面在底部时,Dialog关闭后的Material UI位置跳转
- java - springfox.documentation.builders.RequestHandlerSelectors.withClassAnnotation
- docker - 在 macOS 上运行 Contiki 容器
- python - 在 cx_freeze bdist_rpm 和 bdist_msi 之间选择什么?
- sql - 正则表达式用数字数据提取大查询
- javascript - 是否可以使用 javascript 将文本转换为 URL 格式
- swift - 共享实例的 AVAudioSession 错误:[插件] AddInstanceForFactory:没有为 id 注册工厂
- elasticsearch - 如何让 Elasticsearch 在一个请求中接受多个 json?
- dynamic - 如何在 CMake/CPack 中更改动态链接器