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


Julia Core.Ref用法及代碼示例


用法:

Ref{T}

一個安全地引用 T 類型數據的對象。此類型保證指向正確類型的有效Julia-allocated 內存。隻要引用Ref 本身,就會保護底層數據不被垃圾Collector釋放。

在 Julia 中,Ref 對象使用 [] 取消引用(加載或存儲)。

Ref 創建為 T 類型的值 x 通常寫為 Ref(x) 。此外,為了創建指向容器的內部指針(例如 Array 或 Ptr),可以編寫 Ref(a, i) 以創建對 i - a 的第一個元素的引用。

Ref{T}() 創建對 T 類型值的引用,無需初始化。對於位類型 T ,該值將是當前駐留在分配的內存中的任何值。對於非位類型 T ,引用將未定義,嘗試取消引用將導致錯誤“UndefRefError: access to undefined reference”。

要檢查 Ref 是否是未定義的引用,請使用 isassigned(ref::RefValue) 。例如,如果T 不是位類型,則isassigned(Ref{T}())false。如果T 是位類型,則isassigned(Ref{T}()) 將始終為真。

當作為ccall 參數(作為PtrRef 類型)傳遞時,Ref 對象將轉換為指向它所引用數據的本機指針。對於大多數 T ,或者在轉換為 Ptr{Cvoid} 時,這是指向對象數據的指針。當Tisbits 類型時,該值可以安全地變異,否則變異是嚴格未定義的行為。

作為一種特殊情況,設置 T = Any 將導致在轉換為 Ptr{Any} 時創建指向引用本身的指針(如果 T 是不可變的,則為 jl_value_t const* const*,否則為 jl_value_t *const * )。當轉換為 Ptr{Cvoid} 時,它仍將返回指向數據區域的指針,就像任何其他 T 一樣。

PtrC_NULL 實例可以傳遞給 ccall Ref 參數以對其進行初始化。

用於廣播

Ref 有時用於廣播,以便將引用的值視為標量。

例子

julia> Ref(5)
Base.RefValue{Int64}(5)

julia> isa.(Ref([1,2,3]), [Array, Dict, Int]) # Treat reference values as scalar during broadcasting
3-element BitVector:
 1
 0
 0

julia> Ref{Function}()  # Undefined reference to a non-bitstype, Function
Base.RefValue{Function}(#undef)

julia> try
           Ref{Function}()[] # Dereferencing an undefined reference will result in an error
       catch e
           println(e)
       end
UndefRefError()

julia> Ref{Int64}()[]; # A reference to a bitstype refers to an undetermined value if not given

julia> isassigned(Ref{Int64}()) # A reference to a bitstype is always assigned
true

julia> Ref{Int64}(0)[] == 0 # Explicitly give a value for a bitstype reference
true

相關用法


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