用法:
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。非經特殊聲明,原始代碼版權歸原作者所有,本譯文未經允許或授權,請勿轉載或複製。