如何检查函数参数是否为Function类型?解决typeof判断失效问题
问题描述
我定义了如下函数:
function f(a) do something that depends on a end
该函数的行为取决于参数a,a可以是字符串、整数或函数本身。我希望检查参数a是否为函数类型,目前的代码如下:
function f(a) if typeof(a) == int ... end ... end
我尝试使用typeof(a)进行判断,当a为函数时,得到的结果为:
typeof(a) (singleton type of function a, subtype of Function)
但执行typeof(a) == Function时,返回值为false,请问该如何正确检查参数是否为Function类型?
解决方案
在Julia中,每个函数都拥有自己的单例类型(singleton type),这个类型是抽象类型Function的子类型,但并非Function本身,因此直接用typeof(a) == Function会返回false。你可以通过以下两种方式正确判断:
方法1:使用isa()函数
isa()用于判断某个实例是否属于指定类型(包括该类型的所有子类型),是最直观的判断方式:
function f(a) if isa(a, Int) # 处理整数参数的逻辑 elseif isa(a, String) # 处理字符串参数的逻辑 elseif isa(a, Function) # 处理函数参数的逻辑 end # 剩余逻辑 end
方法2:使用子类型运算符<:
通过判断参数的类型是否是Function的子类型来实现:
function f(a) if typeof(a) == Int # 处理整数参数的逻辑 elseif typeof(a) <: Function # 处理函数参数的逻辑 end # 剩余逻辑 end
两种方法都能正确识别函数类型的参数,其中isa()更偏向于实例层面的类型检查,<:则是类型层面的子类型关系判断,可根据习惯选择使用。
内容的提问来源于stack exchange,提问作者Ben Wilop
相关产品推荐
相关产品推荐

