Ruby 2.x 源代码分析:扩展 概述
前言
本文从 require 语句入手为大家揭开 Ruby 扩展(ext)的面纱
require
我们知道 require 语句可以引入模块,就像 java 里面的 import 语句可以引入类,c/c++ 里面的 include 语句可以引入头文件甚至源文件。但是 Ruby 中的 require 与二者有着本质的不同,它实际上是一个方法(函数)调用,是运行期而非编译期的行为
方法定义
在 Init_load 函数里面定义了 require 方法:
load.c void Init_load(void) { ... rb_define_global_function("require", rb_f_require, 1); ... }
简单起见我们省略掉一些中间函数调用细节,列出 rb_f_require 的调用栈
rb_f_require @ load.c rb_require_safe @ load.c rb_require_internal @ load.c search_required @ load.c
search_required 搜索扩展
在分析 search_required 之前我们先看两个宏定义:
相关推荐
lei0 2020-11-02
webgm 2020-08-16
igogo00 2020-07-04
iconhot 2020-06-26
88481456 2020-06-18
疯狂紫萧 2020-06-16
yezitoo 2020-06-06
SelinaChan 2020-05-15
luckymaoyy 2020-04-25
80437700 2020-04-17
austindev 2020-04-07
我有一只小松鼠 2020-02-29
webfullStack 2020-02-15
binglingnew 2012-10-03
始作俑者 2020-01-19
jinxiutong 2020-01-04
Dawnworld 2019-12-23
yezitoo 2019-12-05