【发布时间】:2012-05-04 04:48:15
【问题描述】:
我正在尝试转换 if 条件:
unless defined? SomeConstant
# do some stuff
end
进入原生 C 扩展的一部分。有人知道如何在 C API 中进行 defined? 谓词检查吗?
编辑 |我想我可以调用:
rb_funcall(rb_cObject, rb_intern("const_defined?"), 1, rb_intern("SomeConstant"))
虽然这在语义上显然略有不同。
【问题讨论】:
-
Object.const_defined?可能与您将获得的一样好。实际的defined?关键字在insns.def中实现(查找DEFINE_INSN)并调用vm_get_ev_const,它在vm_insnhelper.c中是静态的,因此无法访问。 -
我认为你是对的,谢谢!你愿意这样回答吗? :)
-
我记下了一些笔记,但它(当然)并不总是像
Object.const_defined?那样简单。当然。
标签: c ruby ruby-c-extension