julia - 在 Julia 中,制作一组 Vector,并指定 Set 的类型
问题描述
在 Julia 中,这按预期工作:
g1 = [1, 1, 0, 0] / sqrt(2)
u1 = [1, -1, 0, 0] / sqrt(2)
g2 = [0, 0, 1, 1] / sqrt(2)
u2 = [0, 0, 1, -1] / sqrt(2)
up = Set()
push!(up, g1, u1, g2, u2)
给出结果:
Set{Any} with 4 elements:
[0.0, 0.0, 0.7071067811865475, -0.7071067811865475]
[0.7071067811865475, 0.7071067811865475, 0.0, 0.0]
[0.0, 0.0, 0.7071067811865475, 0.7071067811865475]
[0.7071067811865475, -0.7071067811865475, 0.0, 0.0]
但是, Set 被认为是 a Set{Any}
,如果我错误地推送不同的东西,我更喜欢 aSet{Array{Float64, 1}}
以得到错误。
当我尝试:
up = Set{Array{Float64, 1}}
push!(up, g1, u1, g2, u2)
我收到以下错误:
ERROR: MethodError: no method matching push!(::Type{Set{Array{Float64,1}}}, ::Array{Float64,1})
Closest candidates are:
push!(::Any, ::Any, ::Any) at abstractarray.jl:2158
push!(::Any, ::Any, ::Any, ::Any...) at abstractarray.jl:2159
push!(::Array{Any,1}, ::Any) at array.jl:919
...
Stacktrace:
[1] push!(::Type{T} where T, ::Array{Float64,1}, ::Array{Float64,1}) at .\abstractarray.jl:2158
[2] push!(::Type{T} where T, ::Array{Float64,1}, ::Array{Float64,1}, ::Array{Float64,1}, ::Vararg{Array{Float64,1},N} where N) at .\abstractarray.jl:2159
[3] top-level scope at none:0
什么是正确的语法?
解决方案
您忘记了它应该是的构造函数up = Set{Array{Float64, 1}}()
,请参见下面的代码:
julia> up = Set{Array{Float64, 1}}()
Set{Array{Float64,1}} with 0 elements
julia> push!(up, g1, u1, g2, u2)
Set{Array{Float64,1}} with 4 elements:
[0.0, 0.0, 0.7071067811865475, -0.7071067811865475]
[0.7071067811865475, 0.7071067811865475, 0.0, 0.0]
[0.0, 0.0, 0.7071067811865475, 0.7071067811865475]
[0.7071067811865475, -0.7071067811865475, 0.0, 0.0]
推荐阅读
- java - 使用流比较Java中的HashMap列表的正确方法是什么
- mongodb - 如何使用解析服务器从现有的 mongo 集合中获取数据?
- ubuntu - 无法在 ubuntu 中连接端口 443 for https
- java - 无法实例化 MatchXpath
- react-native - react native 中的进度条和 axios
- beautifulsoup - 使用 GraphQL 更新后如何抓取网站
- javascript - 如何从预定义的变量中指定 Puppeteer 中的浏览器语言
- typescript - 如何在打字稿配置中排除多个文件扩展名?
- azure - 我可以将 Azure B2C 与我自己的登录表单一起使用吗?
- function - 如何在 clisp 函数中将 .png 文件作为参数传递