當前位置: 首頁>>代碼示例 >>用法及示例精選 >>正文


Julia @boundscheck用法及代碼示例


用法:

@boundscheck(blk)

將表達式 blk 注釋為邊界檢查塊,允許它被 @inbounds 省略。

注意

寫入@boundscheck 的函數必須內聯到它的調用者中才能使@inbounds 生效。

例子

julia> @inline function g(A, i)
           @boundscheck checkbounds(A, i)
           return "accessing ($A)[$i]"
       end;

julia> f1() = return g(1:2, -1);

julia> f2() = @inbounds return g(1:2, -1);

julia> f1()
ERROR: BoundsError: attempt to access 2-element UnitRange{Int64} at index [-1]
Stacktrace:
 [1] throw_boundserror(::UnitRange{Int64}, ::Tuple{Int64}) at ./abstractarray.jl:455
 [2] checkbounds at ./abstractarray.jl:420 [inlined]
 [3] g at ./none:2 [inlined]
 [4] f1() at ./none:1
 [5] top-level scope

julia> f2()
"accessing (1:2)[-1]"

警告

@boundscheck 注釋允許您作為庫編寫者 opt-in 以允許 other code 使用 @inbounds 刪除邊界檢查。如上所述,調用者必須在使用 @inbounds 之前使用他們可以訪問的信息驗證他們的訪問是否有效。例如,對於您的 AbstractArray 子類的索引,這涉及根據其 axes 檢查索引。因此,@boundscheck 注釋應僅在您確定其行為正確後添加到 getindex setindex! 實現。

相關用法


注:本文由純淨天空篩選整理自julialang.org 大神的英文原創作品 Base.@boundscheck — Macro。非經特殊聲明,原始代碼版權歸原作者所有,本譯文未經允許或授權,請勿轉載或複製。