logo
Loading...

改變function的input argument的值 (Day6 cell 15) - Cupoy

我的問題是來自 Day 6 cell 15 定義的函式function B(x)  x^2 = 2e...

改變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:57
    James 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 中無法修改到外部的值,請將新的值回傳,這樣會是比較好的做法。