- html - 出于某种原因,IE8 对我的 Sass 文件中继承的 html5 CSS 不友好?
- JMeter 在响应断言中使用 span 标签的问题
- html - 在 :hover and :active? 上具有不同效果的 CSS 动画
- html - 相对于居中的 html 内容固定的 CSS 重复背景?
我实际上是在寻找一种在 AS3 中通过引用传递的方法,但后来发现 adobe 和很多人对通过引用传递的理解与我在大学里学到的不同。我被告知 java 是按值传递的,而 C++ 允许按引用传递。
我并不是要争论什么是值传递和引用传递。我只想解释为什么我在问题中使用对象传递...
回到问题,我想做这样的事情:
public function swapCard(cardA:Cards, cardB:Cards) {
var temp:Cards = cardA;
cardA = cardB;
cardB = temp;
}
...
swapCard(c1, c2);
编辑:添加两个关于我如何使用 swapCard 函数的例子
1) player1和player2手牌交换过程中
swapCard(player1.hand[s], player2.hand[t]);
2)在玩家1的手牌和牌组之间交换牌的过程中
swapCard(player1.hand[s], player1.deck[rand]);
在C++中,我们只需要在参数前加一个符号就可以了(我们称THIS为引用传递)。但在 AS3 中,cardA 和 cardB 只是指向形参的指针。在函数中,更改指针不会对形式参数做任何事情:(
我已经搜索了几个小时,但在不知道卡片的所有属性的情况下找不到方法。
如果我必须一张一张地更改卡片的属性,那么也许我应该将 swapCard 更改为 Cards 类中的静态函数? (因为我不想将所有内容都暴露给另一个类(class))我也不确定这是否是一个好习惯。这就像在 Cars 类中添加一个 swap_cars 函数。如果我让这一切发生,接下来会发生什么?洗车、借车、租车……我真的很想保持 Cards 类的清洁,只保留卡片的详细信息。是否有可能在 AS3 中正确执行此操作?
最佳答案
您尝试实现的那种swap
函数在AS3 中是不可能的。输入参数是对输入对象的引用,但引用本身是按值传递的。这意味着您可以在函数内部更改 cardA
和 cardB
但这些更改在函数外部不可见。
编辑:我在您使用示例用法编辑问题后添加了这部分。
您似乎在尝试在每个给定的数组位置处交换 2 个不同数组中的两个对象 - 您可以在 AS3 中为此创建一个函数,但不是您尝试的方式。
一种可能的实现方式是传递数组本身以及您尝试交换的位置;像这样:
// Assumes arrays and indices are correct.
public function SwapCards(playerHand:Array, playerCardIndex:int,
playerDeck:Array, playerDeckIndex:int):void
{
var tempCard:Card = playerHand[playerHandIndex];
playerHand[playerHandIndex] = playerDeck[playerDeckIndex];
playerDeck[playerDeckIndex] = tempCard;
}
请注意,您仍然交换引用并且数组本身仍然通过引用传递(并且数组引用通过值传递 - 如果您愿意,您可以在此函数内将数组更改为新数组,但您不会看到外面的新阵列)。但是,由于数组参数在函数内外引用相同的数组,您可以更改数组的内容(或其他数组属性)以及这些更改将在外面可见。
这个解决方案比克隆卡片更快,因为它涉及为新的 Card
实例分配内存(这是昂贵的)并且该临时实例也必须由垃圾收集器释放(这是也很贵)。
您在评论中提到您将卡片向下传递到较低级别的代码 - 如果您没有对数组(和卡片位置)的反向引用,您将无法轻松交换卡片 -在 AS3 中,所有输入参数都是副本(原始类型的值的副本或复杂对象的引用的副本 - 函数中输入参数的更改在外部不可见)。
关于actionscript-3 - AS3 : how to pass by "object",我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/32595190/
或者存在像 这样的指针和引用C ? 我正在尝试开始使用 vala,但很高兴知道 vala 是“按引用传递”还是“按值传递” 最佳答案 首先你应该明白默认的vala编译器valac编译为 C(作为一种中
就目前而言,这个问题不适合我们的问答形式。我们希望答案得到事实、引用资料或专业知识的支持,但这个问题可能会引发辩论、争论、投票或扩展讨论。如果您觉得这个问题可以改进并可能重新打开,visit the
我确实对 crypt() PHP 函数感到困惑。 当第二个 crypt 显然使用不同的第二个参数时,以下两个 crypt 函数如何给出相同的输出?差异盐意味着差异哈希对吗? echo crypt("p
我正在尝试在方案中模拟堆栈。我正在使用 DrScheme 并选择语言 R5RS。我需要创建 pop、push 和 peek 的函数。但我无法弄清楚如何通过引用传递。我已经阅读了一些关于盒子的信息,但是
我已经查过维基百科并用 google 搜索过,但我仍然无法理解 ALGOL 60 中的按名称传递的工作原理。 最佳答案 我在 Pass-By-Name Parameter Passing 找到了很好的
问题:我想知道在 Excel 2003 VBA 中处理数组的最佳解决方案是什么 背景:我在 Excel 2003 中有一个超过 5000 行的宏。我在过去 2 年中构建了它,将新功能添加为新过程,这有
我正在尝试反转位图数组,而不修改源数组。但问题是源数组也被颠倒了。我做错了什么还是我应该以其他方式做?感谢您的帮助。 private GalleryAdapter galleryAdapter; pr
因此,关于按引用传递/按值传递,方法如何处理参数传递已有详细记录,但是变量赋值又如何呢? 例如,我刚刚编写了一些如下所示的代码: TreeNode parent = null; TreeNode cu
我正在编写一个脚本,它将从我们的星号系统中回填调用详细记录到我们的 MySQL 日志数据库中。在下面的代码中,我试图忽略重复键并继续到下一行,但是当这段代码执行时,我所看到的只是第一行欺骗警告,然后脚
我从一个 Action (executeProcess)重定向到另一个(executeIndex)。我希望能够不使用GET传递参数/变量(例如$this->redirect('index', arra
我经常看到方法接口(interface)的两种相互冲突的策略,大致概括如下: // Form 1: Pass in an object. double calculateTaxesOwed(TaxFo
目前正在学习回调在 JavaScript 中的含义,我正在努力理解回调是如何工作的,以及术语“passing this”或“passing that”的来源以及它如何与回调一起工作?我想展示一些示例代
我通过 URL 传递参数并且页面被正确重定向。如何访问下一个(重定向的)页面上(从上一页)传递并在 URL 中可用的参数?谁能告诉我该怎么做? 或者有没有其他的方式在页面之间传递参数? 是否有类似 A
我通过 URL 传递参数并且页面被正确重定向。如何访问下一个(重定向的)页面上(从上一页)传递并在 URL 中可用的参数?谁能告诉我该怎么做? 或者有没有其他的方式在页面之间传递参数? 是否有类似 A
按引用传递和按名称传递的参数传递模式有什么区别这里是 Python 中的一个示例,但假设我们不使用任何 Python 规则: def P(x,y) global i y=1 prin
我正在编写自己的 LLVM pass,它修改了 LLVM 位码。在生成位码时,我想禁用函数内联,但是当我完成对位码的修改后,我想调用执行函数内联的传递。这个可以吗。如果是,如何? 为了更好地理解我在说
我有一个模板函数,负责将模板值写入流。它看起来像这样: template void Write( T value, std::ostream& stream, endianness_t endian
我一直在使用两个程序 llvm 的 opt 和 clifford wolf 的 yosys两者都有类似的通行证接口(interface)。(他们使用共享库作为优化 passes ) 我想根据我的 ll
在我们使用引用传递的 C++ 中,我们引用了我们从参数传递给函数参数的地址,它本质上是一个指针,对吗?因此,虽然它们本质上是相同的东西,别名和所有,但指针不也需要内存空间吗?因此,无论我们在参数函数中
这是一个关于 64 位整数的效率问题。假设我不需要修改“int”参数的值,我应该通过值还是引用传递它。 假设是 32 位机: 1) 32 位 int:我猜答案是“按值传递”,因为“按引用传递”会产生额
我是一名优秀的程序员,十分优秀!