gpt4 book ai didi

function - Julia:多种类型的相同功能?

转载 作者:行者123 更新时间:2023-12-04 02:57:52 24 4
gpt4 key购买 nike

我有一个在向量上定义的大函数,但我希望它也可以使用单个值。我希望第一个参数的类型是向量或数字。

我尝试了以下内容:

function bigfunction(x::Vector, y::Float64=0.5)

# lots of stuff
z = x .+ y
return z
end


bigfunction(x::Number) = bigfunction()

该函数适用于向量,但不适用于数字。
bigfunction([0, 1, 3])
bigfunction(2)

我应该对 Union{} 做些什么吗?正如我有时看到的那样?或者以不同的方式重新定义方法?

最佳答案

这个问题和回答帮助我说明了在伟大的 blog post 中提出的观点。作者:Chris Rackauckas 关于 Julia 的类型调度。

我已将响应整理为以下代码:

# I ran this only in Julia 1.0.0.

## ========== Original function ==========
## function bigfunction(x::Vector, y::Float64=0.5)
## # lots of stuff
## z = x .+ y
## return z
## end
## bigfunction(x::Number) = bigfunction()
## println(bigfunction([0, 1, 3]))
## println(bigfunction(2))
## ---------- Output has ERROR ----------
## [0.5, 1.5, 3.5]
## ERROR: LoadError: MethodError: no method matching bigfunction()


# ========== Answer Suggested by Picaud Vincent in comments ==========
# Note use of Union in function signature.
function bigfunction(x::Union{Vector, Number}, y::Float64=0.5)
# lots of stuff
z = x .+ y
return z
end
println(bigfunction([0, 1, 3]))
println(bigfunction(2))
## ---------- Output Okay ----------
## [0.5, 1.5, 3.5]
## 2.5


# ========== Answer Suggested by Robert Hönig in comments ==========
# Note change in line right after function definition.
function bigfunction(x::Vector, y::Float64=0.5)
# lots of stuff
z = x .+ y
return z
end
bigfunction(x::Number) = bigfunction([x])
println(bigfunction([0, 1, 3]))
println(bigfunction(2))
## ---------- Output Okay ----------
## [0.5, 1.5, 3.5]
## 2.5


# ========== Answer Suggested by Chris Rackauckas ==========
# Note change in function signature using duct typing--no type for x.
function bigfunction(x, y=0.5)
# lots of stuff
z = x .+ y
return z
end
println(bigfunction([0, 1, 3]))
println(bigfunction(2))
## ---------- Output Okay ----------
## [0.5, 1.5, 3.5]
## 2.5

关于function - Julia:多种类型的相同功能?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/52045626/

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