簡體   English   中英

朱莉婭:以循環宏為條件

[英]Julia: Conditional on For Loop Macros

有沒有一種簡單的方法可以根據用戶所擁有的軟件包來更改“ for循環頭”? 例如,@ progress for很適合在Juno / Atom中添加進度條(剛剛發現!),而我們也有@ simd,@ acc和@parallel這樣的東西。 因此,我想在此循環中使用的是根據用戶的布爾值或取決於可用性,有條件地放置一堆這些宏。 但是,如果我if isdefined(@progress) @progress for ... elseif accelerate @acc for ... elseif @parallel for ... end進行簡單的if isdefined(@progress) @progress for ... elseif accelerate @acc for ... elseif @parallel for ... end或類似的東西,則必須保持相同的粘貼狀態。用於循環代碼。 有一些更優雅的方法嗎? 另外,我可能想組合一些,所以一旦您開始研究可行的組合,最終導致很多代碼!

如果未安裝軟件包,則Pkg.installed方法將出錯。 它需要一個字符串,並在該行之后返回修飾的表達式以及catch塊中的另一種可能性對這種情況有效:

macro optional_something(pkg, expr)
    try
        Pkg.installed(string(pkg)) == nothing && return expr
        esc(quote
            @time $expr
        end)
    catch
        expr
    end
end

# this won't add the macro @time
@optional_something XXX rand(1000)    

# this will
@optional_something Plots rand(1000)

暫無
暫無

聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.

 
粵ICP備18138465號  © 2020-2024 STACKOOM.COM