設置:在朱莉婭考慮一個參數類型相互作用
type MyType1{T1}
x::T1
end
我使用多個調度和類型參數定義在這種類型的單功能的兩種方法:
f1(m::MyType1, i::Int64) = m.x + i #Method 1
f1{T1}(m::MyType1, i::T1) = m.x + i + 1 #Method 2
方法1對應於第二輸入是Int64
的情況。方法2對應於第二輸入是參數的情況。我使用m=MyType1{Int64}(1)
創建了MyType1
的實例,並注意m.x
現在返回1
。
問題1:我看到以下行爲:
In : f1(m, 1.0)
Out : 3.0
好了,所以我沒有提供在函數調用的任何信息關於T1
。看起來Julia推斷它應該執行方法2,理由是第二個輸入不是和Int64
。這是事實如何在引擎蓋下工作嗎?
問題2:比方說,我想調用第二種方法,但第二個輸入爲Int64
。顯然f1(m, 1)
將不起作用,因爲它會調用第一種方法。我嘗試這樣做:
In : f1{Int64}(m, 1)
但朱莉婭拋出這個錯誤:
ERROR: type: instantiate_type: expected TypeConstructor, got Function
是否有可能獲得與指定爲Int64
第二輸入運行第二個方法,還是我傻?
你是正確的,我想實現你的方法2b。我是一個Matlab轉換器,所以仍然在學習類型方面的知識。沒有'Int64'的具體原因。如果沒有性能問題,我會很樂意切換到「Int」。同樣的規則是否適用於'Float'(即使用'Float'而不是'Float64')? ps謝謝你的答案+ 1 + Tick。非常清楚,這正是我所追求的。 – 2014-10-30 12:21:44
不,你必須指定Float64或Float32。原因在於決定使用的類型很少基於機器類型,但需要精確性。 – 2014-10-30 13:08:38