RubyVM可以将Ruby代码编译为字节代码,然后直接执行它.例如,
COMPILE.rb
File.write(ARGV[1],RubyVM::InstructionSequence.compile_file(ARGV[0]).to_binary)
Run Code Online (Sandbox Code Playgroud)
EXECUTE.rb
RubyVM::InstructionSequence.load_from_binary(File.read(ARGV[0]).force_encoding(Encoding::ISO_8859_1)).eval
Run Code Online (Sandbox Code Playgroud)
TEST.BAT
ruby COMPILE.rb test.rb test.rbx
ruby EXECUTE.rb test.rbx
Run Code Online (Sandbox Code Playgroud)
test.rb本身的ruby代码实际上是执行的.这里有任何明显的缺点吗?一位朋友建议人们可能要小心,因为它可能不会在其他操作系统上运行.但是我希望它适用于所有操作系统,例如Java字节码,它可以在JVM执行的所有操作系统上运行.
编译Ruby到字节代码有什么明显的缺点(当然可读性除外)?
我可以动态遍历所有预声明的对象吗?
这是我已经解决了一段时间的问题。理想情况下,我将遍历所有类并检查它们是否实现了某些接口。如果确实如此,则对它们执行一些代码。
目前,我必须提供一些要执行的类数组:
ClassesToCheck = Array(Task_Class1,Task_Class2,Task_Class3,Task_Class4, ...)
Dim klass as object
For each klass in ClassesToCheck
if klass.implements(ITask) then
Call klass.execute()
end if
next
Run Code Online (Sandbox Code Playgroud)
在理想的世界中,我会这样做:
Dim klass as object
For each klass in GET_PREDECLARED_CLASS_OBJECTS_FROM_MEMORY()
if klass.implements(ITask) then
Call klass.execute()
end if
next
Run Code Online (Sandbox Code Playgroud)
我不希望有任何简单的方法来执行此操作,但是我已经对VBA运行时内存进行了一些研究/探索...我认为应该可以,并使用VBA6.DLL找到了一些VB6示例。但是,不幸的是,Microsoft Office本身没有提供此DLL。但是,VBA6.DLL可能被“编译为” Microsoft Office本身。所以方法/字段也应该保存在内存中的某个地方,您只需要知道它们在哪里使用指针数学即可(这是我的理论)
我不认为有人对此有任何经验吗?
我阅读了 Microsoft 的 With-Statement 文档,但仍然不明白该With语句的目的是什么......
来自 Reddit 的 Xpost认为这确实应该在 Stack Overflow 上的某个地方,但找不到任何此类性质的问题。