gpt4 book ai didi

julia - Julia 中的变异函数(修改其参数的函数)

转载 作者:行者123 更新时间:2023-12-04 03:06:33 38 4
gpt4 key购买 nike

您如何在 Julia 中定义变异函数,您希望将结果写入其中一个输入。

我知道函数的存在像 push!(list, a) ,这会改变他们的输入,但是我如何使用感叹号定义我自己的输入。

最佳答案

!只是一个约定;这不是变异函数的要求。
任何函数都可以改变其输入。
但是为了清楚它正在这样做,我们在它后面加上 ! .
但是,要变异的输入确实必须是可变的。
其中不包括 String s,元组,Int64年代,Float32 s等
以及没有 mutable 定义的自定义类型关键词。
许多类型是可变的,例如 Vectors。
但是你确实需要确保改变它们的内容,
而不是对它们的引用。
例如,我们想创建一个函数,将向量的所有元素替换为数字 2。
( fill!(v,2) 是执行此操作的 Base 方法。但为了举例)
什么会起作用
改变什么v包含:

function right1_fill_with_twos!(v::Vector{Int64})
v[:]=[2 for ii in 1:length(v)]
end
这与以下内容相同:
function right2_fill_with_twos!(v::Vector{Int64})
for ii in 1:length(v)
v[ii]=2
end
v
end
那么什么不起作用:
正在改变那个名字 v指着
function wrong1_fill_with_twos!(v::Vector{Int64})
v=[2 for ii in 1:length(v)]
end
这与以下内容相同:
function wrong2_fill_with_twos!(v::Vector{Int64})
u = Vector{Int64}(length(v))
for ii in 1:length(v)
u[ii]=2
end
v = u
end
不能修改不可变变量的原因(如 Int64 s),
是因为它们没有要修改的内容——它们是它们自己的内容。
在许多编程语言中,您必须更改传入函数的变量的内容,而不是更改名称绑定(bind)的内容(替换对象)的概念是相当标准的事情。它来自按值传递,其中一些值是引用。
我听说它被称为 Java 中的黄金法则(引用)

关于julia - Julia 中的变异函数(修改其参数的函数),我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/39293082/

38 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com