【发布时间】:2016-06-13 13:48:03
【问题描述】:
我正在探索 Julia,所以我是新手。现在我正在探索它的强类型特性。我意识到的是,我看不到数组抽象类型的用法。让我用一个例子来解释:
假设我想创建一个接受实数数组的函数,无论其具体类型如何。我会使用:
function f(x::Array{Real})
# do something
end
如果不引发f has no method matching f(::Array{Float64,1}),则永远无法调用此函数
我想调用f([1,2,3]) 或f([1.,2.,3.]),只要元素的类型是Real。
我了解到您可以提升或转换数组(例如 f(convert(Array{Real}, [1, 2, 3])) 左右),但我认为这种方式非常不动态且乏味。
除了摆脱强类型行为之外,还有其他选择吗?
谢谢。
【问题讨论】:
-
您可以定义一个参数函数:
function f{T<:Real}(x::Array{T})。这将捕获f([1,2,3])和f([1.,2.,3.])。 -
只是添加到@user3580870 评论:参数函数没有性能损失。这是 Julia 绝对不可或缺的功能。
-
是的,感谢您的评论,您是对的。我也打算将此替代方案添加为“乏味的替代方案”,但我最终后悔了。这个解决方案也不能让我满意,因为它不能用于匿名函数。
-
如果速度不是问题,您可以定义
f(x::Array)并检查@assert eltype(x)<:Real,这是函数中的第一件事。
标签: arrays julia strong-typing