在julia中,我们如何知道某个类型是通过值还是通过引用来操纵的?
以java为例(至少对于sdk):
基本类型(名称以小写字母开头的类型,如"int")由值操纵
对象(名称以大写字母开头的对象,如"HashMap")和数组通过引用进行操作
因此很容易知道在函数内修改的类型会发生什么.
我很确定我的问题是重复但我找不到复制...
编辑
这段代码:
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
Run Code Online (Sandbox Code Playgroud)
回报:
myarray = ASCIIString["alice","bob", "chocolate"]
myint = 1
Run Code Online (Sandbox Code Playgroud)
这对我来说有点混乱,我之所以提交这个问题.@StefanKarpinski的评论澄清了这个问题.
我的困惑来自于我认为+ =作为操作员,像推的方法!这是修改对象本身.但事实并非如此.
i += 7应该被视为i = i + 7(与不同对象的绑定).实际上,modifyArray如果我使用例如,这种行为将是相同的a = ["chocolate"].
如何在 Julia 中定义指向变量或列表元素的指针?我曾尝试阅读一些资源,但我对在 Julia 中使用指针感到非常困惑。
我希望能够使用变量从 Julia 中的可变结构中获取字段。
例如
mutable struct myType
my_field1::Int = 1
my_field2::Int = 2
my_field3::Int = 3
end
Run Code Online (Sandbox Code Playgroud)
然后让我们假设您使用以下命令声明此结构的特定实例 struct_instance = myType()
如何以可变方式从这个可变结构的实例中提取字段的值?
假设您想使用 for 循环将 my_struct.field[X] 的值分配给变量,以便您当前访问的特定字段取决于变量 X:
foo = zeros(Int64, 3)
for X = 1:3
foo(X) = struct_instance.field[X]
end
Run Code Online (Sandbox Code Playgroud)
我不知道如何实际实现上面的 for 循环——我上面写的只是上面的伪代码。在 MATLAB 中,您将使用以下符号,例如:
foo = zeros(1,3)
for x = 1:3
foo(x) = struct_instance.(sprintf('field%d',x))
end
Run Code Online (Sandbox Code Playgroud)
提前致谢。
假设我需要创建一个巨大的数组并在我的程序中使用它在另一个函数中.我想这样做,而不是每次使用它时都复制这个数组.我知道如果我只是将它们作为参数给出,Julia有一个共享调用机制,它不会复制参数.但是,如果我按照以下方式执行某些操作,它是否仍然能够在循环中每次都不创建副本的情况下运行?:
function main()
huge_arr = ones(Float32,20000,30000)
another_arr = rand(4,5)
coupled_var = (huge_arr,another_arr)
for i=1:100
target_function(coupled_var)
end
end
function target_function(x)
my_first_var = x[1]
my_second_var = x[2]
# some operations here
end
Run Code Online (Sandbox Code Playgroud)