W julia skąd wiemy, czy dany typ jest manipulowany przez wartość lub przez odniesienie?W julia funkcje: przekazywane przez odniesienie lub wartość?
w Javie na przykład (przynajmniej dla SDK):
podstawowych typów (tych, które mają nazwy zaczynające się od małych liter, jak „int”) są manipulowane przez wartość
Przedmioty (te, które mają nazwy zaczynające się od litery, jak „HashMap”) i tablice są manipulowane przez odniesienie
jest więc łatwo wiedzieć, co się dzieje typ zmodyfikowany w funkcji.
Jestem całkiem pewien, moje pytanie jest duplikatem, ale nie mogę znaleźć DUP ...
EDIT
ten kod:
function modifyArray(a::Array{ASCIIString,1})
push!(a, "chocolate")
end
function modifyInt(i::Int)
i += 7
end
myarray = ["alice", "bob"]
modifyArray(myarray)
@show myarray
myint = 1
modifyInt(myint)
@show myint
powraca:
myarray = ASCIIString["alice","bob", "chocolate"]
myint = 1
co było dla mnie trochę mylące, a powodem dlaczego przesłałem to pytanie. Komentarz @Stefan Karpinski wyjaśnił problem.
Moje zamieszanie pochodziło z faktu, że postrzegam + = jako operatora, metodę taką jak push! który modyfikuje sam obiekt. ale to nie jest.
i += 7
należy postrzegać jako i = i + 7
(powiązanie z innym obiektem). Rzeczywiście zachowanie to będzie takie samo dla modifyArray
, jeśli użyję na przykład a = ["chocolate"]
.
kluczem rzeczywistości jednak jest to, że wszystkie wartości są manipulowane przez odniesienie. – StefanKarpinski
Zobacz także: http://stackoverflow.com/questions/33002572/creating-copies-in-julia-with-operator, http://stackoverflow.com/questions/35235597/julia-function-argument-by-reference. – StefanKarpinski
@StefanKarpinski Dzięki, to jasne. Po prostu pomyliłem się ... Zmieniłem moje pytanie na wypadek, gdyby ktoś inny wpadł w tę samą pułapkę. –