博客
关于我
强烈建议你试试无所不能的chatGPT,快点击我
Ruby 2.x 源代码分析:扩展 概述
阅读量:7067 次
发布时间:2019-06-28

本文共 544 字,大约阅读时间需要 1 分钟。

前言

本文从 require 语句入手为大家揭开 Ruby 扩展(ext)的面纱

require

我们知道 require 语句可以引入模块,就像 java 里面的 import 语句可以引入类,c/c++ 里面的 include 语句可以引入头文件甚至源文件。但是 Ruby 中的 require 与二者有着本质的不同,它实际上是一个方法(函数)调用,是运行期而非编译期的行为

方法定义

在 Init_load 函数里面定义了 require 方法:

load.cvoid 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 之前我们先看两个宏定义:

转载地址:http://tzall.baihongyu.com/

你可能感兴趣的文章
从头说catalan数及笔试面试里那些相关的问题 (转)
查看>>
JavaScript高级程序设计学习笔记--事件
查看>>
完毕port(CompletionPort)具体解释 - 手把手教你玩转网络编程系列之三
查看>>
eclipse,myeclipse开发环境下,maven远程部署到tomcat7服务器(图文)
查看>>
atitit.hbnt orm db 新新增更新最佳实践o7
查看>>
分割流 SequenceInputStream (转)
查看>>
Android成长之路-LayoutInflater和inflate的用法
查看>>
ffmpeg中的时间
查看>>
Microsoft Visual Studio Ultimate 2013 with Update 3 CN+EN
查看>>
从数字油田的关键问题说开去
查看>>
[分享]Ubuntu12.04安装基础教程(图文)
查看>>
百度面试-网页搜索部
查看>>
HDU 3060 多边形面积并
查看>>
Map.EntrySet的使用方法
查看>>
【一】仿微信飞机大战cocos2d-x3.0rc1
查看>>
JavaScript 之 最佳位置选择
查看>>
使用TCMalloc优化OpenResty
查看>>
(HLS播放器之中的一个)HLS协议之M3U8解析
查看>>
GPRS管理与创建APN拨号连接(转)
查看>>
C语言标量类型(转)
查看>>