我有一个定义在向量上的大函数,但我希望它也能适用于单个值。我希望第一个参数的类型可以是向量或数字。
我尝试了以下方法:
该函数适用于向量,但不适用于数字。
我尝试了以下方法:
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{}
,我需要做些什么呢?还是以不同的方式重新定义该方法?
union{}
是解决你的问题的完美选择:function bigfunction(x::Union{Vector,Number}, y::Float64=0.5)
可以实现你想要的功能。 - Picaud Vincentbigfunction(x::Number) = bigfunction([x])
。这种风格可能更加简洁。 - Robert Hönigbigfunction
进行小改变,如果作者没有仔细确保每一行都与向量或数字输入兼容,很容易就会出问题。Robert的方法非常巧妙地避开了这个问题(我在我的代码中经常使用类似的习惯用语)。 - Colin T Bowersy
限制为Float64
吗?现在,如果y
是整数、复数、单精度浮点数等,该函数将无法工作。考虑使用y::Number
或y::Real
。我不知道bigfunction
应该做什么,但请考虑是否可以为(x::Number, y::Number=0.5)
定义它,然后在x
是数组时使用广播,也就是说,当x
是数组时调用bigfunction.(x, y)
(带有一个点)。 - DNF