4
另一個新手的問題,我覺得這個區別很迷惑:理解在外部範圍的丟失輸出型
it = 1:3
typeof([i^2 for i in 1:3]) # Array{Int64,1}
typeof([i^2 for i in it]) # Array{Any,1}
爲什麼它身在何處的範圍被定義?
typeof([i^2 for i in it::UnitRange{Int64}])
似乎給出了一個提示,因爲this discussion。然而,不管上述行爲的原因,實際問題將是:我如何指定/強制理解的輸出類型?
編輯:更全面的例子示出了兩個不同的問題,
# global namespace
nu1 = 0.5 + [0 ,1:3]
nu2 = 0.5 + (0:3)
typeof([besselj(_nu,[1,2]) for _nu in nu1]) # Any
typeof([besselj(_nu,[1,2]) for _nu in nu2]) # Any
typeof([besselj(_nu,[1,2]) for _nu in 0.5 + (0:3)]) # correct inference
# within a function
function rb()
nu = 0.5 + [0 ,1:3]
bj = [besselj(_nu,[1,2]) for _nu in nu]
end
function rb2()
nu = 0.5 + (0:3)
bj = [besselj(_nu,[1,2]) for _nu in nu]
end
typeof(rb()) # Any
typeof(rb2())# Correct inference
我先打一個函數,其中使用矢量Vs的範圍產生不同的輸出類型,內的問題,並在試圖解決這個我嘗試全局命名空間,衝進其他問題...
有趣的,因爲我有一個功能內的問題:S – baptiste 2015-03-02 23:19:11
我已經添加了一些東西來解決這兩點。你有具有類型推斷問題的實際代碼嗎? – IainDunning 2015-03-02 23:21:28
非常好,謝謝。我試圖把它縮小到一個最小的例子。 – baptiste 2015-03-02 23:24:23