zobacz Julia Doc:Julia-Lang anonimowy vs nazwie zachowanie funkcji w przekazywaniu argumentu
W Julia, wszystkie argumenty funkcji są przekazywane przez referencję.
Kiedy otrzymam adres pamięci argumentu Float64 z anonimowej funkcji, wygląda on prawidłowo. ale nie jest to prawdą dla nazwanej funkcji.
test = function (a::Float64)
println(pointer_from_objref(a));
end
# => (anonymous function)
function test1(a::Float64)
println(pointer_from_objref(a));
end
# => test1 (generic function with 1 method)
value=0.0;
println(pointer_from_objref(value))
# => Ptr{Void} @0x00007fe797c5c020
test(value)
# => Ptr{Void} @0x00007fe797c5c020
test1(value)
# => Ptr{Void} @0x00007fe799e83960
jak wspomniano @Gnimuc, istnieje inny ustęp od Julia-Lang Doc, który wyjaśnia argumentem przechodzącej zachowanie
argumenty funkcji Julia śledzić konwencja czasami nazywane „pass-by-sharing” , co oznacza, że wartości nie są kopiowane po przekazaniu funkcji do funkcji . Argumenty funkcji same w sobie pełnią funkcję nowych powiązań zmiennych (nowe lokalizacje, które mogą odnosić się do wartości), ale wartości, do których się odnoszą, są identyczne z wartościami przekazanymi.
Czy istnieje związek między zachowaniem "przeprowadź przez dzielenie się" a powyższym kodem?
AFAIK wszystkie argumenty funkcji są przekazywane przez odniesienie z wyjątkiem zwykłych danych, takich jak liczby i znaki. Spróbuj zmienić swój numer float w tych funkcjach ... W tym samym czasie znajdziesz coś, co jest sprzeczne z tą zasadą. Bardzo interesujące pytanie. Nie mogę się doczekać odpowiedzi. –
od [doc] (http://docs.julialang.org/en/latest/manual/functions/#argument-passing-behavior): "Argumenty funkcji same działają jako nowe powiązania zmiennych (nowe lokalizacje, które mogą odnosić się do wartości) , ale wartości, do których się odnoszą, są identyczne z przekazanymi wartościami. " Zastanawiam się, co oznacza termin "lokalizacja". – Gnimuc