我在规范中编写了一个 ActionScript ByteCode 解析器,以获取堆栈底部的对象。现在,据我所知,ActionScript 虚拟机 (AVM) 中的堆栈底部是最先被压入堆栈的对象。我真的很想避免为了到达底部而将所有项目从堆栈中弹出。有谁知道是否有可能获得底部项目?如果没有,AVM 会做一些奇怪的事情:P
谢谢,乔什
根据定义,这是不可能的。堆栈的每个元素只知道他之前的元素,因此使用经典堆栈实现您不知道堆栈底部元素的地址。使用另一个结构来存储对象。(例如列表)
你试图做的是违背堆栈的目的。但是,您可以编写一个包装类。
当调用 Push 方法并且堆栈为空时,将其对象添加到堆栈并在您的类中保留一个引用。当 Pop 方法被调用并且堆栈只有一个你保留的对象清除引用时。
您可以使用 ToArray()。
var stackArray = myStack.ToArray();
然后只是:
stackArray.Lenght - 1
访问最后一个元素。