如何在Julia中将参数显式键入为函数

如何在Julia中将参数显式键入为函数,julia,Julia,我试图确保传递给函数的第三个参数是函数本身。如何设置该显式类型 下面的示例是我想做的,其中运算符实际上是一个数学函数,如+、%、^,等等。在Julia中显式键入参数作为函数与常规显式类型相同 下面是一个简单的示例,其中运算符被显式地类型化为函数: julia> function math(numOne::Int64, numTwo::Int64, operator::Function) operator(numOne, numTwo) end julia> math(1,

我试图确保传递给函数的第三个参数是函数本身。如何设置该显式类型


下面的示例是我想做的,其中运算符实际上是一个数学函数,如+、%、^,等等。

在Julia中显式键入参数作为函数与常规显式类型相同

下面是一个简单的示例,其中运算符被显式地类型化为函数:

julia> function math(numOne::Int64, numTwo::Int64, operator::Function)
    operator(numOne, numTwo)
end

julia> math(1, 1, +)
2

julia> math(3, 2, ^)
9

julia> math(3, 2, 3)
ERROR: MethodError: no method matching math(::Int64, ::Int64, ::Int64)
Closest candidates are:
  math(::Int64, ::Int64, ::Function) at REPL[9]:2
Stacktrace:
 [1] top-level scope at REPL[13]:1

我想说的是,最好避免使用类型显式地注释该参数。虽然Julia中有一个
函数
抽象类型,但任何对象都可以使用调用重载进行调用。

并非所有函数都可以随意编辑以使我的答案更完整,因为我不知道这会如何改变行为。但是请注意,并非所有函数都可以“调用”Julia中的对象的类型是
函数的子类型。一个最显著的例子是来自
PyCall.jl
包的Python函数,可能还有类型构造函数。因此,将类型限制为
函数
通常不是一个好主意。是否存在需要显式键入的情况?这有助于提高绩效吗?