3

我正在阅读Rubinius 源代码,并且不断遇到类似这样的方法:

def self.do_something
  Rubinius.primitive :vm_do_something
  raise SomeError, "primitive failed to do something"
end

例如,kernel/alpha.rbkernel/bootstrap/rubinius.rb都有很多这些。它们到处都是,我似乎找不到Rubinius.primitive定义的地方。因为我不知道它是做什么的,所以我很难理解 Rubinius 是如何完成工作的。

4

1 回答 1

3

我在 IRC 上继续freenode.net #rubinius学习,并了解到 的行为Rubinius.primitive是将其调用的方法替换为对 C++ 代码的调用。只有在原语以某种方式失败时,才会执行通常跟随原语调用的 raise 调用。

于 2014-03-02T00:10:12.313 回答