改變function的input argument的值 (Day6 cell 15)
2020/04/08 上午 04:58
Julia程式語言討論版
Yikai
觀看數:2
回答數:2
收藏數:0
我的問題是來自 Day 6 cell 15 定義的函式
function B(x)
x^2 = 2
end
有辦法作到在函式中更改input variable的效果嗎(不使用array或自己定義mutable structure)?如:
a = 2
B(a)
println(a)
output:
a = 4
回答列表
-
2020/04/09 下午 04:57James Huang贊同數:0不贊同數:0留言數:0
您好,您想要達到的效果,也就是變數作用域 (Scope of Variable) 內容中提到的概念,使用 global 關鍵字即可在函式裡面改變 a 的值,範例程式碼如下。
但是如果像您上面的程式碼,再度定義 argument a 的話,a 在函式內被視為 local 變數,在裡面改變的值不會改變 global a。
a = 2
function B()
global a ^= 2
end
B()
println(a)
-
2020/04/21 上午 10:53杜岳華贊同數:0不贊同數:0留言數:0
固然使用 global 可以達到更改 input variable 的效果,但仍然不建議在 function 中使用 global,如此會覆蓋原本的變數 x,而且使用全域變數會造成副作用及效能變差等等壞處。
在 Julia 的參數傳遞機制中,一般數值為 immutable,所以在 function 中無法修改到外部的值,請將新的值回傳,這樣會是比較好的做法。