相关疑难解决方法(0)

使用=运算符在Julia中创建副本

当我创建一些数组A并将其分配给B时

A = [1:10]
B = A
Run Code Online (Sandbox Code Playgroud)

我可以修改A,更改反映在B中

A[1] = 42
# B[1] is now 42
Run Code Online (Sandbox Code Playgroud)

但是,如果我使用标量变量执行此操作,则更改不会传播:

a = 1
b = a
a = 2
# b remains being 1
Run Code Online (Sandbox Code Playgroud)

我甚至可以将事物混合起来并将矢量转换为标量,并且变化不会传播:

A = [1:10]
B = A
A = 0
# B remains being 1,2,...,10
Run Code Online (Sandbox Code Playgroud)

=运营商究竟做了什么?当我要复制的变量和修改旧的保存新变量的完整性,当我应该使用b = copy(a)经过短短b=a

julia

17
推荐指数
1
解决办法
2301
查看次数

Julia函数参数引用

文档说

在Julia中,函数的所有参数都通过引用传递.

所以我很惊讶地看到这两个函数的行为有所不同:

function foo!(r::Array{Int64})                                                                                                                                                                                     
        r=r+1                                                                                                                                                                                                      
end


function foobar!(r::Array{Int64})                                                                                                                                                                                  
        for i=1:length(r)                                                                                                                                                                                          
                r[i]=r[i]+1                                                                                                                                                                                        
        end                                                                                                                                                                                                        
end 
Run Code Online (Sandbox Code Playgroud)

这是意想不到的不同输出:

julia> myarray
2-element Array{Int64,1}:
 0
 0

julia> foo!(myarray);

julia> myarray
2-element Array{Int64,1}:
 0
 0

julia> foobar!(myarray);

julia> myarray
2-element Array{Int64,1}:
 1
 1
Run Code Online (Sandbox Code Playgroud)

如果数组是通过引用传递的,我会期待foo!将零更改为1.

reference pass-by-reference julia

13
推荐指数
3
解决办法
7270
查看次数

如何在 Julia 中通过引用和值传递对象?

我从这里知道:

Julia 函数参数遵循有时称为“传递共享”的约定,这意味着值在传递给函数时不会被复制。函数参数本身充当新的变量绑定(可以引用值的新位置),但它们引用的值与传递的值相同。在函数中对可变值(例如数组)所做的修改对调用者是可见的。这与 Scheme、大多数 Lisps、Python、Ruby 和 Perl 以及其他动态语言中的行为相同。

鉴于此,我很清楚要通过引用传递,您需要做的就是将可变类型传递给函数并进行编辑。

那么我的问题就变成了,我如何清楚地区分传值和传引用?有没有人有一个例子显示一个函数被调用了两次?一次是按引用传递,一次是按值传递?

我看到这篇文章暗示了一些类似的想法,但它没有完全回答我的问题。

julia

5
推荐指数
1
解决办法
1602
查看次数

标签 统计

julia ×3

pass-by-reference ×1

reference ×1