原来你是这样的过程,恕我愚昧这么久 - 续集

微信公众号原文

系统:Windows 7
软件:Excel 2010

使用场景or困惑

  • 接着上一次的两种参数传递方式(按值传递,按地址传递),说说字典在传递过程中是否也遵循同样的标准
  • 字典:Set d = CreateObject("Scripting.Dictionary")

思考:实验设计

  1. 主过程中有1个字典,字典中有两个键(x ,y),并赋值为:1,2
  2. 有两个子过程,子过程1:按值传递(ByVal),子过程2:按地址传递(ByRef)
  3. 子过程1中分别给键x,y重新赋值3,4;子过程2中分别给键x,y重新赋值5,6
  4. 分别输出每一次的值

结果如下:


原来你是这样的过程,恕我愚昧这么久 - 续集_第1张图片
1.png

代码

主过程main

Sub main()
    Set d = CreateObject("Scripting.Dictionary")
    d("x") = 1
    d("y") = 2
    Debug.Print ("转换之前")
    Debug.Print ("d(x) =" & d("x"))
    Debug.Print ("d(y) =" & d("y"))
    
    Call 按值传递(d)
    Debug.Print ("")
    Debug.Print ("按值传递")
    Debug.Print ("d(x) =" & d("x"))
    Debug.Print ("d(y) =" & d("y"))

    Call 按地址传递(d)
    Debug.Print ("")
    Debug.Print ("按地址传递")
    Debug.Print ("d(x) =" & d("x"))
    Debug.Print ("d(y) =" & d("y"))
    
End Sub

代码截图

子过程1:按值传递

Sub 按值传递(ByVal c)
    c("x") = 3
    c("y") = 4
     
End Sub

代码截图

原来你是这样的过程,恕我愚昧这么久 - 续集_第2张图片
3.png

子过程2:按地址传递

Sub 按地址传递(e)
    e("x") = 5
    e("y") = 6
     
End Sub

代码截图

原来你是这样的过程,恕我愚昧这么久 - 续集_第3张图片
4.png

代码解读

  1. 两个子过程,最后实现的效果,都是“按地址传递”的效果,为啥?
  2. 其实我不知道答案,这是不是涉及到对象的概念(参考Python)

更多精彩,请关注微信公众号
扫描二维码,关注本公众号

原来你是这样的过程,恕我愚昧这么久 - 续集_第4张图片
公众号底部二维码.jpg

你可能感兴趣的:(原来你是这样的过程,恕我愚昧这么久 - 续集)