Java Memento在VBA中的实现
我正在寻找Memento模式(GoF)的VBA实现。我正在考虑转换Java版本。它将用于Excel加载项的撤消/重做功能 具体来说,我对这条线路有困难:Java Memento在VBA中的实现,java,.net,vba,design-patterns,memento,Java,.net,Vba,Design Patterns,Memento,我正在寻找Memento模式(GoF)的VBA实现。我正在考虑转换Java版本。它将用于Excel加载项的撤消/重做功能 具体来说,我对这条线路有困难: return new Memento(state); 或者,更具体地说,是否有人可以在VBA中重写: public Memento saveToMemento() { //System.out.println("Originator: Saving to Memento."); return new Memento(state
return new Memento(state);
或者,更具体地说,是否有人可以在VBA中重写:
public Memento saveToMemento() {
//System.out.println("Originator: Saving to Memento.");
return new Memento(state);
}
我试图转换的全部代码都可以在上面的维基百科链接中找到
谢谢Java中的
return
关键字与VBA中的return
关键字非常不同。在VBA中,return
与gosub
配对,作为一种改变过程内执行流程的方法
在Java中,return
表示“退出函数”,或者返回适当类型的值(如您的示例中所示),或者不返回任何值(在VBA中的void
函数-Java等价于Sub
)
在您的示例中,它将返回类型为Memento
的对象。这必须是函数的返回类型或该返回类型的子类型。通过使用new
关键字创建新对象(类似于VBA中的new
关键字)。名为state
的对象作为参数传递给新对象的构造函数
在VBA中,您可以编写以下内容:
Function saveToMemento(state As String) As Variant
saveToMemento = createMemento(state)
End Function
其中,
createMemento
是您编写的一个函数,用于创建一个适当的结构来保存memento信息您能更具体地说明您的问题是什么吗?return
关键字的使用?使用new
操作符?Dirk,我已经重新编写了这个问题并包含了新的信息,希望您现在能够理解我的问题所在。barrowc,我如何创建新对象的构造函数(作为参数),或者更具体地说,如何编写createMemento函数以模拟SaveToMento的Java代码?您可以在VBA中定义类,然后创建这些类的对象。VBA本身没有构造函数,但可以使用Class\u Initialize()
初始化对象。不幸的是,您无法将参数传递给该Sub
,因此必须调用单独的Sub
来处理初始状态的设置。谢谢你,你的回答很有用。