gpt4 book ai didi

julia - 理解 Julia 的函数 do block

转载 作者:行者123 更新时间:2023-12-02 01:32:29 24 4
gpt4 key购买 nike

查看 get基本 Julia 的函数是 apparently旨在使用 do-block 来使用:

  get(dict, key) do
# default value calculated here
time()
end

get 的签名是 get(Dictionary_name, Key_name, Default Value) 。这意味着 do block 自动插入默认值作为 get 的最后一个参数。 .

当我将 do block 的语法与 this 中的语法进行比较时线程,我注意到一个差异:

my_function(f, container) = begin
for element in container
f(element)
end
return nothing
end

my_function([1,2,3]) do x # equivlent to my_function(print, [1,2,3])
print(x)
end

注意函数 f 的作用是 my_function 的第一个参数,因此 do block 插入 print作为 my_function 的第一个参数,不是最后一个。

这是我的困惑:为什么一个示例中的 do block 将变量作为最后一个参数插入,而在另一个示例中则将变量插入作为第一个参数?

最佳答案

get 有几种方法,可以查看docs要了解什么是方法,您可以使用 methods(get) 列出这些方法。如果您运行 methods(get, (Function, Dict, Any)) 这将是使用您显示的 do block 调用的方法,您应该看到类似的内容

# 1 method for generic function "get":
[1] get(default::Union{Function, Type}, h::Dict{K, V}, key) where {K, V} in Base at dict.jl:528

如果您调用 methods(get, (Dict, Any, Any)) 您将获得您所引用的方法。

如果在 REPL 中您尝试输入

d = Dict("a"=>1, "b"=>2)
f(x) = time()
?get(f, d, "a")
# the '?' should enter the help?> mode but doesn't work if this is copy pasted

您应该看到有关 get 方法的帮助消息,该方法在您使用 do block 显示的情况下被调用(与此等效)。因此 do block 将函数作为第一个参数插入,这使得它调用另一个方法。

希望这会有所帮助!

关于julia - 理解 Julia 的函数 do block ,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/72967309/

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