【问题标题】:Can I add a method to a function to receive as an argument another particular function?我可以向函数添加方法以接收另一个特定函数作为参数吗?
【发布时间】:2017-02-19 05:55:32
【问题描述】:

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

我为张量添加了一个函数dot 的方法:Base.dot(a::Tensor_field, b::Tensor_field) = do something...。

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

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

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

【问题讨论】:

  • 澄清一下:My_Module_Name.#nabla 是一个真正的数据类型。名字怪怪的,不能正常访问(因为#开始评论)但是还是可以通过getfield(My_Module_Name, Symbol("#nabla"))访问。

标签: julia


【解决方案1】:

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

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<TAB> 并在代码中使用它而不是单词 nabla。如果您的张量场被称为例如?(写成\mbfv<TAB>),然后你可以在你的Julia代码中写∇⋅?! (中间的点写成\cdot<TAB>,是dot函数的别名。)

【讨论】:

    猜你喜欢
    • 2013-10-26
    • 2019-02-19
    • 2013-04-23
    • 1970-01-01
    • 2013-11-02
    • 1970-01-01
    • 1970-01-01
    • 2011-01-31
    • 2015-01-30
    相关资源
    最近更新 更多