【问题标题】:Is there a way, in As3, to modify a class variable within a function, if you have a it passed as a parameter?有没有办法在 As3 中修改函数中的类变量,如果你有它作为参数传递?
【发布时间】:2010-08-08 21:01:07
【问题描述】:

这是我的意思的一个简单示例:

private var ex:String="day";

......

closeWindows(ex);
trace(ex);//I would like it to trace "night"

......

//this can be in another class, we assume that the "ex" variable can't be accessed directly
private function closeWindows(context:String):void {
  context = "night"
}

不知何故,我需要将引用而不是值本身传递给“closeWindows”方法。

非常感谢任何帮助。 谢谢。

【问题讨论】:

  • 到目前为止,我只找到了一个肮脏的解决方案,将字符串包装在一个对象或数组中。因为 Array 和 Object 数据类型包含对值的引用而不是包含其实际值,所以我会得到我需要的。但我有点想要一个更清晰的解决方案。 :)

标签: apache-flex flash actionscript-3


【解决方案1】:

不幸的是,AS3 不支持通过引用传递原语。所以你是对的,典型的解决方案之一是对原语使用某种包装器,例如this question

【讨论】:

    【解决方案2】:

    可能您已经意识到这一点,但在 Actionscript 中,参数总是按值传递。所以你想做的事情是不可能的,除非使用一些特别的包装器(对象、数组或其他)。

    但是你不能直接返回并重新分配新的字符串吗?

    【讨论】:

      【解决方案3】:

      感谢两位的回答,最后似乎没有办法将变量作为引用而不是作为值传递。但是,您可以将函数作为引用传递,所以这是我的小 get/set hack。

      private var ex:String="day";
      
                          ......
      
                          closeWindows(setEx);
                          trace(getEx());
      
                          ......
      
      
                          private function getEx():String {
                              return ex;
                          }
      
                          private function setEx(value:String):String {
                              ex = value;
                          }
      
      
                          private function closeWindows(context:Function):void {
                              context.call(null, "night");
                          }
      

      【讨论】:

        猜你喜欢
        • 1970-01-01
        • 2019-05-29
        • 2021-03-23
        • 1970-01-01
        • 2016-10-12
        • 1970-01-01
        • 1970-01-01
        • 1970-01-01
        • 2022-09-27
        相关资源
        最近更新 更多