用法:
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 參數(作為Ptr 或Ref 類型)傳遞時,Ref 對象將轉換為指向它所引用數據的本機指針。對於大多數 T ,或者在轉換為 Ptr{Cvoid} 時,這是指向對象數據的指針。當T 是isbits 類型時,該值可以安全地變異,否則變異是嚴格未定義的行為。
作為一種特殊情況,設置 T = Any 將導致在轉換為 Ptr{Any} 時創建指向引用本身的指針(如果 T 是不可變的,則為 jl_value_t const* const*,否則為 jl_value_t *const * )。當轉換為 Ptr{Cvoid} 時,它仍將返回指向數據區域的指針,就像任何其他 T 一樣。
Ptr 的 C_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相關用法
- Julia Core.NamedTuple用法及代碼示例
- Julia Core.ifelse用法及代碼示例
- Julia Core.isa用法及代碼示例
- Julia Core.typeof用法及代碼示例
- Julia Core.UnionAll用法及代碼示例
- Julia Core.nfields用法及代碼示例
- Julia Core.Function用法及代碼示例
- Julia Core.DomainError用法及代碼示例
- Julia Core.undef用法及代碼示例
- Julia Core.UndefVarError用法及代碼示例
- Julia Core.isdefined用法及代碼示例
- Julia Core.invoke用法及代碼示例
- Julia Core.Array方法用法及代碼示例
- Julia Core.getfield用法及代碼示例
- Julia Core.ErrorException用法及代碼示例
- Julia Core.Vararg用法及代碼示例
- Julia Core.NTuple用法及代碼示例
- Julia Core.@big_str用法及代碼示例
- Julia Core.Type用法及代碼示例
- Julia Core.Task用法及代碼示例
- Julia Core.Union用法及代碼示例
- Julia Core.AssertionError用法及代碼示例
- Julia Core.BoundsError用法及代碼示例
- Julia Core.Float64方法用法及代碼示例
- Julia Core.InexactError用法及代碼示例
注:本文由純淨天空篩選整理自julialang.org 大神的英文原創作品 Core.Ref — Type。非經特殊聲明,原始代碼版權歸原作者所有,本譯文未經允許或授權,請勿轉載或複製。
