gpt4 book ai didi

julia - 为具有多种可能类型的参数定义函数

转载 作者:行者123 更新时间:2023-12-02 00:37:57 25 4
gpt4 key购买 nike

定义一个参数可以有多种类型的函数的最佳方法是什么?例如Float64Array{Float64}/Array{Float64,2}SparseMatrixCSC{Float64}

假设我定义了以下函数:

function meanValue(a::Array{Float64})
return mean(a)
end

如何在不复制粘贴原始函数内容的情况下为标量值或稀疏向量定义函数?谢谢!

最佳答案

在这种情况下,您可以使用Union,例如

julia> f(x::Union{Float64, Int}) = typeof(x)
f (generic function with 1 method)

julia> f(1)
Int64

julia> f(1.0)
Float64

julia> f(true)
ERROR: MethodError: no method matching f(::Bool)
Closest candidates are:
f(::Union{Float64, Int64}) at REPL[1]:1

这种方法的一个很好的例子是 Base.Chars:

julia> Base.Chars
Union{AbstractArray{Char,1}, Char, Set{Char}, Tuple{Vararg{Char,N} where N}}

它用于例如在 strip 函数中。

然而,在许多情况下,不指定接受的类型会很好,例如:

f(x) = typeof(x)

这没有性能损失,并且有一个好处,如果将来你想在你最初没有想到的类型上使用该函数,你不必重新定义它(甚至可能没有定义类型定义函数时)。

当然有些情况下你想指定接受的类型 - 那么你可以:

  1. 使用联合
  2. 单独处理案例和/或使用作为所需类型父类(super class)型的抽象类型(参见@DNF 的回答)。

关于julia - 为具有多种可能类型的参数定义函数,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/48582703/

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