2017-02-19 82 views
2

我已經建立了我一成不變Tensor_field和作用於張量(即nabla(a::Tensor_field) = do something我可以向函數添加一個方法來接收另一個特定函數作爲參數嗎?

我添加的功能dot的張量的方法的功能nabla:。Base.dot(a::Tensor_field, b::Tensor_field) = do something...

現在我想定義一個新的行爲功能dotnabla作爲參數。 喜歡的東西Base.dot(nabla::function, a::Tensor_field) = do something different

我知道朱莉婭我們能夠函數作爲參數傳遞給其他函數,但我無法找到文檔如何定義一個「功能」參數的方法。

如果鍵入typeof(nabla)輸出My_Module_Name.#nabla,而不是一個真正的數據類型...

+2

只是爲了闡明:'My_Module_Name。#nabla' _is_是一個真正的DataType。這個名字很奇怪,不能正常訪問(因爲'#'開始註釋),但仍然可以通過getfield(My_Module_Name,Symbol(「#nabla」))'來訪問。 –

回答

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內。

請注意,您可以將∇作爲\nabla<TAB>並在代碼中使用,而不是在nabla之間使用。如果你的張量字段被稱爲例如(書寫爲\mbfv<TAB>),然後您可以在您的Julia代碼中編寫∇⋅! (中心點寫爲\cdot<TAB>,是dot函數的別名。)

相關問題