gpt4 book ai didi

polymorphism - Julia 函数签名中的 "not a subtype of"

转载 作者:行者123 更新时间:2023-12-02 03:07:29 26 4
gpt4 key购买 nike

我想要一个函数,它可以接受除某些特定类型之外的任何内容。粗略地说就像

function f(y::X) where y<:setdiff(Any,Real)
return y
end

是否存在“不是子类型”运算符,其作用与<:相反?还有其他方法可以实现这一目标吗?

编辑:这是错误的,没有必要理解问题或答案,因此删除线: 原因是我想要函数 f 的特定方法。对于任何真实的和对于任何任意对象的一般的。问题是,如果我只是将此函数签名保留为 where y那么它将把通用函数专门化为 Float64 类型,它比我为任何实数编写的函数( where y<:Real )更具体。

最佳答案

确实有一个“不是子类型”运算符(它是 >: ),但您不需要该运算符来解决您的问题。

如果您只想要一个适用于所有类型的通用方法,以及一个特定于 Real 子类型的方法,那么您应该这样做:

f(x::Any) = 1
f(x::Real) = 2

第一种方法与仅添加任何类型签名(即 f(x) = 1 )相同,并且该函数将作为所有参数类型的后备。然而,自从 RealAny 更具体,如果输入是Real,则将使用第二种方法而不是第一种方法。 :

julia> f("Hello, world!"), f(0x01), f(1 + 2im), f(true)
(1, 2, 1, 2)

请注意,无论您在方法定义中添加什么类型签名,您都可以获得最大性能,当该方法实际运行时,它将根据具体输入被编译为特定版本类型。

关于polymorphism - Julia 函数签名中的 "not a subtype of",我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/58583605/

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