該方案是這樣的:
有一個叫做alg1的演算法,還有一個叫做alg2的演算法。
并且有一個名為solve的入口函式,我如何將alg1傳遞給solve,然后我可以用alg1進行計算,并將alg2傳遞給alg2進行計算?
solve(a, b, alg1) # return the results computed with alg1
solve(a, b, alg2) #回傳用alg2計算的結果。
我需要將演算法寫成函式嗎?
uj5u.com熱心網友回復:
一個典型的優雅的API可以基于多重調度機制,可以是這樣的:
abstract type AbstractAlgo end
結構Algo1 <。摘要Algo end 結構Algo1 <.
結構Algo2 <: 抽象阿爾戈
param::Int
end 結束
function solve(a,b,alg::T) where T< : AbstractAlgo
拋出("演算法$T還沒有實作")
結束。
function solve(a,b,alg::Algo1)
println("solving...")
結束。
一些測驗:
julia> solve(1,2, Algo1()
解決...
julia> solving(1,2, Algo2(777)
ERROR: "Algo2演算法還沒有實作"。
uj5u.com熱心網友回復:
在julia中,你可以將函式作為引數傳遞,因此:
function alg1(a,b)
...
end
solve(a,b,alg) = alg(a,b)
# 呼叫 solve
answer = solve(a,b,alg1)
當然還有其他的方法,如將algs轉化為結構,并采用多重調度,但上面的解決方案應該可以回答這個問題。
轉載請註明出處,本文鏈接:https://www.uj5u.com/qukuanlian/308835.html
標籤:
下一篇:<p>我最近開始學習LWJGL,我正試圖讓一個簡單的著色器作業。我遵循了一個"老"教程,但當我運行代碼時,沒有任何形狀出現(視窗打開,但只是黑色)。以下是我的著色器的.
