2015-05-24 52 views
6

在Julia中,有沒有辦法編寫一個基於它的參數類型(編譯時)分支的宏,至少對於在編譯時可以推斷出哪些類型的參數?就像在下面的例子中,我編寫了一個名爲code_type的函數,它返回編譯時類型x。有沒有這樣的功能,或任何方式來產生這種行爲? (或者做類型推斷之前,使得這種事情是不可能的宏得到擴展。)在Julia中,宏可以訪問它的參數的推斷類型嗎?

macro report_int(x) 
    code_type(x) == Int64 ? "it's an int" : "not an int" 
end 

回答

4

除了spencerlyon2的答案,另一種選擇是僅產生明確的分支:

macro report_int(x) 
    :(isa(x,Int64) ? "it's an int" : "not an int") 
end 

如果@report_int(x)是一個函數內使用,並x類型可以推斷出來,那麼JIT將能夠優化掉死分支(這種方法被標準庫中的@evalpoly macro使用)。

相關問題