gpt4 book ai didi

arrays - 啪啪的解释

转载 作者:行者123 更新时间:2023-12-02 02:27:50 26 4
gpt4 key购买 nike

http://learnxinyminutes.com/docs/julia/ 上阅读有关 Julia 的内容时我发现了这个:

# You can define functions that take a variable number of
# positional arguments
function varargs(args...)
return args
# use the keyword return to return anywhere in the function
end
# => varargs (generic function with 1 method)

varargs(1,2,3) # => (1,2,3)

# The ... is called a splat.
# We just used it in a function definition.
# It can also be used in a fuction call,
# where it will splat an Array or Tuple's contents into the argument list.
Set([1,2,3]) # => Set{Array{Int64,1}}([1,2,3]) # produces a Set of Arrays
Set([1,2,3]...) # => Set{Int64}(1,2,3) # this is equivalent to Set(1,2,3)

x = (1,2,3) # => (1,2,3)
Set(x) # => Set{(Int64,Int64,Int64)}((1,2,3)) # a Set of Tuples
Set(x...) # => Set{Int64}(2,3,1)

我确信这是一个非常好的解释,但是我无法理解主要思想/好处。

据我所知:

  1. 在函数定义中使用 splat 可以让我们指定我们不知道该函数将给出多少个输入参数,可能是 1,也可能是 1000。并没有真正看到这样做的好处,但至少我理解(我希望)这个概念。
  2. 使用 splat 作为函数的输入参数会...到底是什么?我为什么要使用它?如果我必须将数组的内容输入到参数列表中,我将使用以下语法:some_array(:,:)(对于 3D 数组,我将使用 some_array(:,:,:) 等)。

我认为我不明白这一点的部分原因是我正在努力解决元组和数组的定义,元组和数组是 Julia 中的数据类型(就像 Int64 是一种数据类型)吗?或者它们是数据结构,什么是数据结构?当我听到数组时,我通常会想到二维矩阵,这也许不是在编程环境中想象数组的最佳方式?

我意识到你可能会写整本关于数据结构是什么的书,我当然可以用谷歌搜索它,但是我发现对某个主题有深刻理解的人能够以更简洁的方式解释它(并且也许是简化的)方式,然后让我们说维基百科文章可以,这就是为什么我问你们(和女孩)。

最佳答案

您似乎了解了该机制以及它们的作用/用途,但正在为如何使用它而苦苦挣扎。我明白了。

我发现它们对于需要传递未知数量的参数并且不想在交互使用函数时在传递数组之前先构造一个数组的情况很有用。

例如:

func geturls(urls::Vector)
# some code to retrieve URL's from the network
end
geturls(urls...) = geturls([urls...])

# slightly nicer to type than building up an array first then passing it in.
geturls("http://google.com", "http://facebook.com")

# when we already have a vector we can pass that in as well since julia has method dispatch
geturls(urlvector)

有几点需要注意。 Splat 允许您将可迭代对象转换为数组,反之亦然。看到上面的[urls...] 位了吗? Julia 将其转换为扩展了 urls 元组的 Vector,根据我的经验,这比参数本身要有用得多。

这只是它们对我有用的例子之一。当您使用 Julia 时,您会遇到更多情况。

它主要是为了帮助设计使用起来感觉自然的 API。

关于arrays - 啪啪的解释,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/26983019/

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