Julia 我是否可以向函数添加一个方法,以作为参数接收另一个特定函数?

Julia 我是否可以向函数添加一个方法,以作为参数接收另一个特定函数?,julia,Julia,我已经创建了我的不可变的Tensor\u字段和一个作用于该张量的函数nabla(即nabla(a::Tensor\u字段)=做点什么 我为张量的函数dot添加了一个方法:Base.dot(a::tensor\u字段,b::tensor\u字段)=做点什么… 现在我想定义一个新的行为,用nabla作为参数来运行dot。 类似于Base.dot(nabla::function,a::Tensor_field)=做一些不同的事情 我知道在Julia中,我们可以将函数作为参数传递给其他函数,但我在文档中

我已经创建了我的不可变的
Tensor\u字段
和一个作用于该张量的函数
nabla
(即
nabla(a::Tensor\u字段)=做点什么

我为张量的函数
dot
添加了一个方法:
Base.dot(a::tensor\u字段,b::tensor\u字段)=做点什么…

现在我想定义一个新的行为,用
nabla
作为参数来运行
dot
。 类似于
Base.dot(nabla::function,a::Tensor_field)=做一些不同的事情

我知道在Julia中,我们可以将函数作为参数传递给其他函数,但我在文档中找不到如何为“函数”参数定义方法


如果我键入
typeof(nabla)
则输出为
My_Module_Name.#nabla
,而不是真正的数据类型…

如果您希望它适用于任何函数,您可以这样做

Base.dot(f::Function, a::Tensor_field) = do something different
如果您只希望它适用于已定义的
nabla
函数,则可以利用您发现的优势,即每个函数都有一个唯一的类型:

Base.dot(f::typeof(nabla), a::Tensor_field) = do something different
这将只匹配名为
nabla
的函数,该函数现在将在函数
dot
内被称为
f


请注意,您可以编写∇ 作为
\nabla
并在代码中使用它,而不是
nabla
这个词。如果您的张量字段被调用,例如
只是为了澄清:
My_Module_Name。#nabla
是一个真实的数据类型。该名称很奇怪,无法正常访问(因为
开始注释),但仍然可以通过
getfield访问(我的模块名称,符号(“#nabla”)