Tham khảo Julia doc:Julia-Lang vô danh vs hành vi chức năng có tên trong thông qua lập luận
Trong Julia, tất cả các đối số cho chức năng này thông qua tham khảo.
Khi tôi nhận được địa chỉ bộ nhớ của đối số Float64 từ một hàm ẩn danh, có vẻ như đúng. nhưng nó không đúng đối với một hàm được đặt tên.
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
như @Gnimuc đề cập, có một đoạn từ Julia-Lang Doc giải thích Luận Đi qua hành vi
Julia đối số chức năng theo một quy ước đôi khi được gọi “pass-by-chia sẻ” , có nghĩa là các giá trị không được sao chép khi chúng được chuyển đến các hàm. Đối số chức năng tự hoạt động như mới ràng buộc biến (vị trí mới có thể tham chiếu đến giá trị), nhưng giá trị mà chúng tham chiếu giống hệt với giá trị được truyền.
Có bất kỳ mối liên hệ nào giữa hành vi "chia sẻ thông qua" và mã trên không?
AFAIK tất cả các đối số cho hàm được thông qua tham khảo với ngoại lệ dữ liệu đơn giản như số và ký tự. Cố gắng thay đổi số phao của bạn bên trong các chức năng này ... Đồng thời bạn đã tìm thấy một cái gì đó mâu thuẫn với quy tắc đó. Câu hỏi rất thú vị. Tôi mong được thấy câu trả lời. –
từ [doc] (http://docs.julialang.org/en/latest/manual/functions/#argument-passing-behavior): "Các đối số chức năng hoạt động như các ràng buộc biến mới (các vị trí mới có thể tham chiếu đến các giá trị) , nhưng các giá trị mà chúng đề cập đến giống hệt với các giá trị được truyền. " Tôi tự hỏi thuật ngữ 'vị trí' có ý nghĩa gì ở đây. – Gnimuc