我可以向函数添加一个方法来接收另一个特定函数作为参数吗?

时间:2017-02-19 05:55:33

标签: julia

我创建了我的不可变Tensor_field和一个作用于张量的函数nabla(即nabla(a::Tensor_field) = do something

我为张量添加了一个方法dotBase.dot(a::Tensor_field, b::Tensor_field) = do something...

现在我想定义一个新行为,以dot作为参数来运行nabla。 类似于Base.dot(nabla::function, a::Tensor_field) = do something different

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

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

1 个答案:

答案 0 :(得分:5)

如果您希望它适用于任何功能,您可以执行

Base.dot(f::Function, a::Tensor_field) = do something different

如果希望它适用于已定义的nabla函数,您可以利用已发现的内容,即每个函数都具有唯一类型:

Base.dot(f::typeof(nabla), a::Tensor_field) = do something different

这将匹配名为nabla的函数,该函数现在将在函数f内调用dot

请注意,您可以将write写为\nabla<TAB>并在代码中使用它而不是单词nabla。如果调用张量场,例如(写为\mbfv<TAB>),然后您可以在您的Julia代码中写∇⋅! (居中的点写为\cdot<TAB>,是dot函数的别名。)