fue*_*zig 3 tuples type-conversion julia
tuple为什么使用或转换向量时会得到以下不同的结果Tuple?
julia> a = [1, 2, 3]
3-element Vector{Int64}:
1
2
3
julia> tuple(a)
([1, 2, 3],)
julia> Tuple(a)
(1, 2, 3)
Run Code Online (Sandbox Code Playgroud)
但广播给出了相同的结果:
julia> tuple.(a)
3-element Vector{Tuple{Int64}}:
(1,)
(2,)
(3,)
julia> Tuple.(a)
3-element Vector{Tuple{Int64}}:
(1,)
(2,)
(3,)
Run Code Online (Sandbox Code Playgroud)
(后者并不令人惊讶,因为它只是将单个数字转换为元组。)
(这是 Julia 1.6.1。)
Tuple是一种类型,与 Julia 基础中的所有集合一样,如果将另一个集合传递给它,它会根据另一个集合的内容创建该类型的实例。因此,Tuple([1, 2, 3])构造一个由值 1、2 和 3 组成的元组,就像Set([1, 2, 3])构造一组相同值一样。同样,如果您编写,您会得到一个包含,和Dict([:a => 1, :b => 2, :c => 3])配对的字典。当构造函数的参数是迭代器时,这也能很好地工作;一些例子::a => 1:b => 2:c => 3
julia> Tuple(k^2 for k=1:3)\n(1, 4, 9)\n\njulia> Set(k^2 for k=1:3)\nSet{Int64} with 3 elements:\n 4\n 9\n 1\n\njulia> Dict(string(k, base=2, pad=2) => k^2 for k=1:3)\nDict{String, Int64} with 3 entries:\n "10" => 4\n "11" => 9\n "01" => 1\nRun Code Online (Sandbox Code Playgroud)\n这就是为什么Tuple它会这样工作。tuple另一方面,该函数是一个从其参数创建元组的函数,如下所示:
julia> tuple()\n()\n\njulia> tuple(1)\n(1,)\n\njulia> tuple(1, "two")\n(1, "two")\n\njulia> tuple(1, "two", 3.0)\n(1, "two", 3.0)\nRun Code Online (Sandbox Code Playgroud)\n为什么要拥有tuple而不是仅仅拥有Tuple?您可以将最后一个示例表示为Tuple([1, "two", 3.0])。然而,这需要构造一个临时的无类型数组,只是为了迭代它并从其内容中创建一个元组,这确实效率很低。如果有一种更高效的容器类型,编译器通常可以消除构建......就像元组一样。为此我们会写Tuple((1, "two", 3.0)). 哪个有效,但完全多余,因为(1, "two", 3.0)已经是您想要的元组。那么你为什么要使用呢tuple?大多数时候您不需要,您只需使用(1, "two", 3.0)构造元组的语法。但有时您需要一个实际的函数,可以将其应用于某些值以获得它们的元组\xe2\x80\x94,tuple这就是该函数。实际上,您可以创建一个匿名函数来非常轻松地完成此操作:(args...) -> (args...,)。你可以想想tuple该函数的一个方便的缩写。